نحوه استفاده از Ninject framework در MVC

پنجشنبه 11 شهریور 1395

در این مقاله ، هدف این است که نگاهی بر چگونگی استفاده از Ninject Framework برای حذف کدهای سخت وابستگی ها دربرنامه MVC داشته باشیم .

نحوه استفاده از Ninject framework در MVC

اکثر برنامه نویسان فکر میکنند که IOC containers فقط برای برنامه های خیلی بزرگ است . که اشتباه میکنند ، به این دلیل که در همه برنامه ها قابل استفاده است . از کوچک تا بزرگ ، به این دلیل که این ، برنامه را پشتیبانی (maintainabilty) میکند و کیفیت برنامه شما را افزایش می دهد . 

برخی مردم سوالاتِ دیگی نیز در ذهن دارند ، که این است :  هزینه داشتن IOC Containers چقدر است ؟

در جواب باید گفت که ، بیشتر IOC containerها برای دانلود و استفاده رایگان هستند . 

Ninject برای استفاده در پروژه های شخصی و تجاری کاملا رایگان است .


برای اطلاعات یبشتر میتوانید اینجا را چک کنید. 


Ninject framework چیست ؟
Ninject framework  یک کتابخانه فوق العاده سبک از Ninject است ، که به ما در رفع وابستگی کمک خواهد کرد . 

Dependency injection چیست ؟
Dependency injection یک design pattern است ، که برای حذف کدهای سخت وابستگی است .

انواع 
Injection :

• Constructor Injection

• (Property Setter Injection (Properties

• Method Injection

اگر جستجویی در اینترنت داشته باشید ، مثال های زیادی در مورد  Constructor Injection پیدا خواهید کرد ، 
 ما در این مقاله درباره چگونگی استفاده از هر سه نوع injection صحبت خواهیم کرد . 

ابزارهای پیشنیاز :

• Visual Studio 2012

• SQL Server 2008

با ایجاد یک پروژه MVC کار را شروع میکنیم . 

ایجاد برنامه :

Visual studio را باز کرده و یک new project بسازید :


عکس 1 . Start page

بعد از کلیک بر روی new project ، پنجره ای باز خواهد شد .در آن ، web را انتخاب کرده و از درون آن 
“ASP.NET MVC 4 Web Application" را انتخاب کنید . نام پروژه خود را MvcNInject بگذارید و ok را بزنید . 

 انتخاب Template :


شکل 2 : انتخاب Template 


بعد از ok کردن پنجره ای با نام New ASP.NET MVC 4 Project باز خواهد شد ، Basic را انتخاب کرده و View Engine را روی razor قرار دهید و به باقی تنظیمات دست نزنید . 


شکل 3 : انتخاب پروژه MVC 4 

بعد از انجام تمام مراحلی که بالا گفتیم ، ok را بزنید تا پروژه شما ساخته شود . 

ساختار پروژه بعد از ایجاد پروژه 
MvcNInject  :



شکل 4 : ساختار پروژه 

بعد از ساختن پروژه خودمان ، قصد اضافه کردن Class Libraryرا به پروژه داریم . 

اضافه کردن [Class library] به پروژه web :

هدف ما اضافه کردنِ [Class library] به پروژه است :

1. MvcNInject.Model

2. MvcNInject.Interface

3. MvcNInject.Concrete

[MvcNInject.Model [Class library شامل تمام Model ها خواهد بود .
[MvcNInject.Interface [Class library شامل تمام  interface ها خواهد بود . 
[MvcNInject.Concrete [Class library شامل تمام concert class ها خواهد بود . 

اضافه کردنه [MvcNInject.Model [Class library :
ابتدا ما به سراغ اضافه کردن لایه Model با نام MvcNInject.Model می رویم . 

توجه :

ممکن است شما به این فکر کنید که چرا وقتی ما فولدر Model در پروژه داریم ، دلیل اضافه کردن لایه 
MvcNInject.Model چیست؟- این بدین دلیل است که اگر ما پروژه بزرگی داشته باشیم،بهتراست که Model ها را به [Class library] منتقل کرده و refrence آن را در پروژه اصلی قرار دهیم . 

برای اضافه کردن [Class library] ، کافیست روی پروژه خود راست کلیک کرده و Add را بزنید و در مرحله بعد new project را انتخاب کنید . 


شکل 5 : مراحل اضافه کردنِ Class Library به پروژه 


بعد از انتخاب new project ، پنجره ای باز خواهد شد .  مراحل کار در شکل زیر شماره گذاری شده اند ، آنها را برای اضافه کردن class library انجام دهید . 



شکل 6 : اضافه کردن [MvcNInject.Model [Class library


ساختار پروژه بعد از اضافه کردن MvcNInject.Model :


حال هدف ما اضافه کردن interface ها به برنامه است . 

اضافه کردن [MvcNInject.Interface[Class library :

ما MvcNInject.Interface را به همان روشی که 
[MvcNInject.Model [Class library را اضافه کردیم ، به پروژه اضافه می کنیم . نام class library که ایجاد می کنید را MvcNInject.Interface  بگذارید . 

شکل 7 : اضافه کردن 
 [MvcNInject.Interface[Class library

ساختار پروژه بعد از اضافه کردن 
MvcNInject.Interface :



حال ، هدف ما اضافه کردن concrete classها است ، که  interface را پیاده سازی خواهد کرد . 

اضافه کردن [MvcNInject.Concrete [Class library

این class library هم همانند روش های قبلی اضافه کنید و نام class library را MvcNInject.Concrete بگذارید . 

شکل 8 : اضافه کردن [MvcNInject.Concrete [Class library :

ساختار پروژه بعد از اضافه کردن MvcNInject.Concrete :



 حال ، ما تمام class library هاای لازم داشتیم را به پروژه اضافه کرده ایم . 

اضافه کردن Model در MvcNInject.Model : 
مرحله بعد ، ما قصد اضافه کردن یک model در [MvcNInject.Model] با نام Event را داریم . 
برای اضافه کردن model فقط کافیست که روی MvcNInject.Model راست کلیک کرده و یک class جدید  Add کنید .  نام کلاسی که ایجاد میکنید را Event بگذارید . 

 

بعد از اضافه کردن model ،  اجازه دهید تعدادی property به آن اضافه کنیم . 

اضافه کردن Properties به EventModel :

using System;    
using System.Collections.Generic;    
using System.ComponentModel.DataAnnotations;    
using System.Linq;    
using System.Text;    
using System.Threading.Tasks;    
    
namespace MvcNInject.Model    
{    
    public class EventModel    
    {    
        [Key]    
        public int EventID { get; set; }    
        public string EventName { get; set; }    
        public string EventStarts { get; set; }    
        public string EventEnds { get; set; }    
        public string EventLocation { get; set; }    
    }    
} 


بعد از اضافه model  و properties ، حال اجازه دهید یک Interface اضافه کنیم .

اضافه کردن Interface به MvcNInject.Interface :

هدف ما اضافه کردن یک Interface به MvcNInject.Interface است . برای اضافه کردن یک Interface ، 
کافیست روی MvcNInject.Interface کلیک راست کرده ، add را بزنید و یک New Item اضافه کنید . 

بعد از کلیک بر روی New Item ، پنجره ای نمایش داده خواهد شد . از درون آن Interface را انتخاب کرده و نام آن را IEvent بگذارید . 

شکل 9 : 
اضافه کردن Interface به MvcNInject.Interface .



بعد از اضافه کردن Interface ، برای اینکه در model ، Interfac ما قابل پردازش باشد ، یک refrence از MvcNInject.Model را در MvcNInject.Interface قرار می دهیم .

 اضافه کردن یک refrence از  (MvcNInject.Model (Event در (MvcNInject.Interface (IEvent :

برای اضافه کردن refrence ، فقط کافیست روی [MvcNInject.Interface [class library راست کلیک کرده و add referece را بزنید ، بعد از زدن ، پنجره ای با نام Reference Manager باز خواهد شد . در درون آن MvcNInject.Model را انتخاب کرده و ok را بزنید . 


شکل 10 : اضافه کردن 
یک refrence از MvcNInject.Model  در MvcNInject.Interface  


بعد از اضافه کردن reference، حال تعدادی متد را درون interfaceمان declare میکنیم . 


Declaring method در MvcNInject.Interface  :

using MvcNInject.Model;    
using System;    
using System.Collections.Generic;    
using System.Linq;    
using System.Text;    
using System.Threading.Tasks;    
    
namespace MvcNInject.Interface    
{    
    public interface IEvent    
    {    
        void Add(EventModel _Event);     // Create New Event    
        void Update(EventModel _Event);  // Modify Event    
        void Delete(EventModel _Event);  // Delete Event    
        EventModel GetById(int id); // Get an Single Event details by id    
        IEnumerable<EventModel> GetAll();  // Gets All Event details    
    }    
}  

بعد از declare کردن متد ها در Interface ، حال به سراغ اضافه کردن concrete class در
MvcNInject.Concrete  می رویم . 

اضافه کردن Class به MVCNInject.Concrete  :

ما قصد اضافه کردن Class به MVCNInject.Concrete به Class library در project را داریم .
برای اضافه کردن model ، روی MvcNInject.Concrete راست کلیک کرده و یک class به آن add کنید . 
نام کلاسی که ایجاد کرده اید را EventConcrete بگذارید . 




اضافه کردن Reference از (MvcNInject.Interface (Event به (MvcNInject.Concrete (IEvent :
 برای اضافه کردن reference فقطط کافیست که روی MvcNInject.Concrete [Class Library] راست کلیک کرده و add reference را بزنید . پنجره ای باز خواه شد ، در آن 
MvcNInject.Interface و MvcNInject.Model را انتخاب کنید . انتخاب هر دو اجباریست . 





اضافه کردن reference ها به پایان رسید ، حال اجازه دهید سراغ پیاده‌سازی متد هایی که در IEvent تعریف کردیم ، در EventConcrete برویم . 

کلاس های EventConcrete  در  IEvent interface پیاده‌‌سازی خواهند شد . 

using MvcNInject.Interface;    
using System;    
using System.Collections.Generic;    
using System.Linq;    
using System.Text;    
using System.Threading.Tasks;    
    
namespace MvcNInject.Concrete    
{    
    public class EventConcrete : IEvent    
    {    
    
    }    
} 


حال بعد از پیاده سازی IEvent interface در مرحله بعد بااستفاده از Dapper ORM به سراغ انجام عملیات  CRUD می رویم . 

اضافه کردن Dapper ORM به [MvcNInject.Concrete [Class Library :

حال برای انجام تمام عملیات های پایگاه داده همانند CRUD ، به سراغ استفاده از  Dapper ORM میرویم .

ما قصد داریم Reference of Dapper ORM را از طریق NuGet package manager  به پروژه اضافه کنیم و آن را به [MvcNInject.Concrete [Class Library اضافه میکنیم . 

برای باز کردن NuGet package manager کافیست بر روی MvcNInject.Concrete [Class Library] کلیک راست کرده و از لیست Manage NuGet package را انتخاب کنید . 

Dapper را جستجو کرده و Dapper dot net را نصب کنید . 



ساختار پروژه بعد از اضافه کردن Dapper :



بعد از اضافه کردن Dapper dot net در مرحله بعدی به سراغ ایجاد پایگاه داده ، جداول و
 Store procedureهای آن برای انجام عملیات CRUD ، می رویم . 

بخش پایگاه داده :

یک پایگاه داده با نام EventDB ایجاد میکنیم . 




بعد از آن ، جدولی با نام EventTB را درون پایگاه داده EventDB  ایجاد میکنیم . 



ما برای انجام عملیات CRUD قصد استفاده از store procedureها را داریم .

در زیر نام stored procedure که ما ایجاد کرده ایم را میبینید . این stored procedure را ما در فایل sample برای دانلود قرار داده ایم . 



Connection string used :

<connectionStrings>  
   <add name="DefaultConnection"  
   providerName="System.Data.SqlClient"  
   connectionString="Data Source=sai-pc;Database=EventDB;UID=sa;Password=Pass$123" />  
</connectionStrings>  


بعد از کامل سازی بخش Database دوباره به سراغ کلاس  EventConcrete در MvcNInject.Concrete [Class Library] می رویم . 

 کلاس  EventConcreteدر   IEvent interface پیاده سازی خواهد شد . 

در این قسمت به سراغ پیاده سازی تمام متد هایی که در interface پیاده سازی کرده ایم و از Dapper برای انجام عملیات CRUD استفاده میکردند ، می رویم .

using Dapper;    
using MvcNInject.Interface;    
using MvcNInject.Model;    
using System;    
using System.Collections.Generic;    
using System.Configuration;    
using System.Data;    
using System.Data.SqlClient;    
using System.Linq;    
using System.Text;    
using System.Threading.Tasks;    
    
namespace MvcNInject.Concrete    
{    
    public class EventConcrete : IEvent    
    {    
        public void Add(EventModel Event)    
        {    
            using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))    
            {    
                con.Open();    
                SqlTransaction sqltans = con.BeginTransaction();    
                var param = new DynamicParameters();    
                param.Add("@EventID", Event.EventID);    
                param.Add("@EventName", Event.EventName);    
                param.Add("@EventStarts", Event.EventStarts);    
                param.Add("@EventEnds", Event.EventEnds);    
                param.Add("@EventLocation", Event.EventLocation);    
                var result = con.Execute("sprocEventTBInsertUpdateSingleItem",    
                      param,    
                      sqltans,    
                      0,    
                      commandType: CommandType.StoredProcedure);    
    
                if (result > 0)    
                {    
                    sqltans.Commit();    
                }    
                else    
                {    
                    sqltans.Rollback();    
                }    
    
            }    
    
        }    
    
        public void Update(EventModel Event)    
        {    
            using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))    
            {    
                con.Open();    
                SqlTransaction sqltans = con.BeginTransaction();    
                var param = new DynamicParameters();    
                param.Add("@EventID", Event.EventID);    
                param.Add("@EventName", Event.EventName);    
                param.Add("@EventStarts", Event.EventStarts);    
                param.Add("@EventEnds", Event.EventEnds);    
                param.Add("@EventLocation", Event.EventLocation);    
                var result = con.Execute("sprocEventTBInsertUpdateSingleItem",    
                    param,    
                    sqltans,    
                    0,    
                    commandType: CommandType.StoredProcedure);    
    
    
                if (result > 0)    
                {    
                    sqltans.Commit();    
                }    
                else    
                {    
                    sqltans.Rollback();    
                }    
            }    
        }    
    
        public void Delete(EventModel Event)    
        {    
            using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))    
            {    
                con.Open();    
                SqlTransaction sqltans = con.BeginTransaction();    
                var param = new DynamicParameters();    
                param.Add("@EventID", Event.EventID);    
                var result = con.Execute("sprocEventTBDeleteSingleItem",    
                    param,    
                    sqltans,    
                    0,    
                    commandType: CommandType.StoredProcedure);    
    
                if (result > 0)    
                {    
                    sqltans.Commit();    
                }    
                else    
                {    
                    sqltans.Rollback();    
                }    
            }    
        }    
    
        public EventModel GetById(int id)    
        {    
            using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))    
            {    
                con.Open();    
                var param = new DynamicParameters();    
                param.Add("@EventID", id);    
                return con.Query<EventModel>("sprocEventTBSelectSingleItem",    
                    param,    
                    null,    
                    true,    
                    0,    
                    commandType: CommandType.StoredProcedure).SingleOrDefault();    
            }    
        }    
    
        public IEnumerable<EventModel> GetAll()    
        {    
    
            using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))    
            {    
                con.Open();    
                var param = new DynamicParameters();    
                return con.Query<EventModel>("sprocEventTBSelectList",    
                    null,    
                    null,    
                    true,    
                    0,    
                    commandType: CommandType.StoredProcedure).ToList();    
            }    
        }    
    
    
    
    }    
} 


بعد از اتمام پیاده سازی در مرحله بعدی به سراغ اضافه کردن reference of Model و
refrence of Interface به پروژه اصلی می رویم . [MvcNInject]


اضافه کردن reference of Model و Interface به پروژه اصلی MvcNInject :

برای اضافه کردن reference کافیست روی MvcNInject راست کلیک کرده و Add Reference را بزنید ، پنجره جدیدی باز خواهد شد ، در آن MvcNInject.Interface , MvcNInject.Model , MvcNInject.Concrete را انتخاب کنید ، انتخاب آنها برای مانیاز است و در ادامه okرا بزنید . 


Reference بعد از اضافه شدن به پروژه :
بعد از اضافه کردن این reference حال یک controller با نام EventController اضافه می کنیم . 

اضافه کردن Controller :

نام Controller را EventController و در قسمت Template
MVC controller with empty read/write actions ، را انتخاب کنید و در انتها Add را بزنید . 



ساختار پروژه بعد از اضافه کردن EventController  :



EventController با تمام action Methodهای خالی آن :



بعد از اضافه کردن Controller حال در مرحله بعد reference of Ninject Framework را به برنامه  MvcNInject اضافه می کنیم . 

اضافه کردن Ninject Framework Reference :



دو راه برای نصب Microsoft Unity Framework وجود دارد :

نصب با استفاده از Manage NuGet package :
برای باز کردن Manage NuGet package کافیست روی پروژه خود راست کلیک  کرده و Manage NuGet package را انتخاب کنید  . Ninject MVC4 را جستجو کنید و همانطور که در زیر نمایش داده شده است Ninject.MVC4 را نصب کنید . 




نصب با استفاده از Package Manager Console :

برای نصب Ninject Framework  با استفاده از Package Manager Console ابتدا روی Tools کلیک کرده ، -سپس NuGet package Manager - و در درون آن Package Manager Console را انتخاب کنید . 

در Package Manager Console دستور زیر را وارد کنید :


بعد از وارد کردن دستور فقط کافیست که enter را بزنید  .


 

بعد از نصب Ninject Framework شما بایدکلاسی را در  App_Start ببنید ،  کلاس NinjectWebCommon

ساختار پروژه بعد از اضافه کردن 
Ninject Framework :



در زیر شما تصویری از  کلاس NinjectWebCommon  را مشاهده می کنید . 




حال ، به دنبال اضافه کردن کلاسی به نام NinjectResolver  می رویم که همه 
 Mapping of Registered Type در آن ذخیره خواهد شد . 

NinjectResolver  از System.Web.Mvc.IDependencyResolver ارث بری خواهد کرد :

using Ninject;    
using System;    
using System.Collections.Generic;    
using System.Linq;    
using System.Web;    
    
namespace MvcNInject.App_Start    
{    
    public class NinjectResolver: System.Web.Mvc.IDependencyResolver    
    {    
        private readonly IKernel _kernel;    
    
        public NinjectResolver()    
        {    
            _kernel = new StandardKernel();    
            AddBindings();    
        }    
        public object GetService(Type serviceType)    
        {    
            return _kernel.TryGet(serviceType);    
        }    
        public IEnumerable<object> GetServices(Type serviceType)    
        {    
            return _kernel.GetAll(serviceType);    
        }    
        private void AddBindings()    
        {    
           // _kernel.Bind<To, From>(); // Registering Types    
        }    
    }    
        
}  


Registering Types در Ninject :

حال ما قصد داریم تمام registre typeها را با Ninject Container ثبت کنیم . 



حال ما قصد داریم type ها را در کلاس NinjectResolver  ثبت کنیم . یک متد با نام ()AddBindings داریم :

private void AddBindings()  
{  
   this._kernel.Bind<IEvent>().To<EventConcrete>(); // Registering Types  
}  


این نشان دهنده این است که در هر کجا که ما از IEvent برای Constructor injection استفاده کردیم ، این باید EventConcrete object را به اینجا تزریق کند . 

در این متد شما میتوانید تمام mappingهای برنامه خود را ثبت کنید . 

حال ، ما نیاز به ساخت object داریم ، تمام object هایی که ساخته می شوند توسط Ninject container مدیریت خواهند شد . که شما این درخواست را از Ninject Container میکنید تا این کار را برای شما انجام دهد پس هر وابستگی ای قابل حل شدن است . 

در زیر کلاس کامل NinjectResolver  را می بینید . 


NinjectResolver Class :

using MvcNInject.Concrete;    
using MvcNInject.Interface;    
using Ninject;    
using System;    
using System.Collections.Generic;    
using System.Linq;    
using System.Web;    
    
namespace MvcNInject.App_Start    
{    
    public class NinjectResolver: System.Web.Mvc.IDependencyResolver    
    {    
        private readonly IKernel _kernel;    
    
        public NinjectResolver()    
        {    
            _kernel = new StandardKernel();    
            AddBindings();    
        }    
    
        public object GetService(Type serviceType)    
        {    
            return _kernel.TryGet(serviceType);    
        }    
    
        public IEnumerable<object> GetServices(Type serviceType)    
        {    
            return _kernel.GetAll(serviceType);    
        }    
    
        private void AddBindings()    
        {    
            this._kernel.Bind<IEvent>().To<EventConcrete>(); // Registering Types    
        }    
    }    
        
}  

حال یک مرحله نهایی باقی مانده است ، نیاز داریم که کلاس NinjectResolver  را در Global.asax متد
()Application_Start فراخوانی کنیم . 

درمتد ()Application_Start کلاس NinjectResolver  را فراخوانی میکنیم . 

DependencyResolver.SetResolver(new NinjectResolver()); 

در زیر شما کلاس کامل Global.asax  را مشاهده می کنید . 

using MvcNInject.App_Start;    
using System;    
using System.Collections.Generic;    
using System.Linq;    
using System.Web;    
using System.Web.Http;    
using System.Web.Mvc;    
using System.Web.Optimization;    
using System.Web.Routing;    
    
namespace MvcNInject    
{    
    public class MvcApplication : System.Web.HttpApplication    
    {    
        protected void Application_Start()    
        {    
            AreaRegistration.RegisterAllAreas();    
    
            DependencyResolver.SetResolver(new NinjectResolver());// Calling  NinjectResolver Class    
    
            WebApiConfig.Register(GlobalConfiguration.Configuration);    
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);    
            RouteConfig.RegisterRoutes(RouteTable.Routes);    
            BundleConfig.RegisterBundles(BundleTable.Bundles);    
        }    
    }    
} 


بعد از تکمیل فراخوانی در کلاس Global.asax ،حال هدف ما انتقال به EventController  است و در این Controller ما به سراغ پیاده سازی Constructor Injection می رویم . 

public class EventController : Controller    
{    
     private readonly IEvent _IEvent;    
     
     public EventController(IEvent IEvent)    
     {    
         _IEvent = IEvent;    
     }    
}  

در زیر قسمتی از کد EventController را مشاهده میکنید .

using MvcNInject.Interface;    
using MvcNInject.Model;    
using System;    
using System.Collections.Generic;    
using System.Linq;    
using System.Web;    
using System.Web.Mvc;    
namespace MvcNInject.Controllers    
{    
    public class EventController : Controller    
    {    
        private readonly IEvent _IEvent;    
        
        public EventController(IEvent IEvent)    
        {    
            _IEvent = IEvent;    
        }    
    
            
        public ActionResult Index()    
        {    
            var Data = _IEvent.GetAll();    
            return View(Data);    
        }    
        //    
        // GET: /Event/Details/5    
    
        public ActionResult Details(int id)    
        {    
            var Data = _IEvent.GetById(id);    
            return View(Data);    
        }    
        //    
        // GET: /Event/Create    
    
        public ActionResult Create()    
        {    
            return View();    
        }    
        //    
        // POST: /Event/Create    
    
        [HttpPost]    
        public ActionResult Create(EventModel EventModel)    
        {    
            try    
            {    
                _IEvent.Add(EventModel);    
                return RedirectToAction("Index");    
            }    
            catch    
            {    
                return View();    
            }    
        }    
        //    
        // GET: /Event/Edit/5    
    
        public ActionResult Edit(int id)    
        {    
            var Editdata = _IEvent.GetById(id);    
            return View(Editdata);    
        }    
        //    
        // POST: /Event/Edit/5    
    
        [HttpPost]    
        public ActionResult Edit(EventModel EventModel)    
        {    
            try    
            {    
                _IEvent.Update(EventModel);    
                return RedirectToAction("Index");    
            }    
            catch    
            {    
                return View();    
            }    
        }    
        //    
        // GET: /Event/Delete/5    
        public ActionResult Delete(int id)    
        {    
            var Deletedata = _IEvent.GetById(id);    
            return View(Deletedata);    
        }    
        //    
        // POST: /Event/Delete/5    
        [HttpPost]    
        public ActionResult Delete(EventModel EventModel)    
        {    
            try    
            {    
                _IEvent.Delete(EventModel);    
                return RedirectToAction("Index");    
            }    
            catch    
            {    
                return View();    
            }    
        }    
    }    
}  


حال به سراغ add کردن view های action متد ها می رویم .

(View (Create / Update / Delete / Index را اضافه می کنیم . 

برای اضافه کردن view کافیست که روی ActionResult راست کلیک کرده و Add View را بزنید . 

view engine را Razor بگذارید و EventModel را برای Model class انتخاب کنید . 




بعد از زدن دکمه Add در فولدر view ، view شما ساخته میشود . در فولدر view ما یک دایرکتوری هم نام با Event ساختیم . create را  در Scaffolding Template انتخاب کنید . 

با همین روشی که ذکر شد ما کلِ view ها را اضافه میکنیم . 

اضافه کردن Details View :
برای اضافه کردن Details View مراحل بالا را انجام دهید ، Event را در Model انتخاب کنید و Detail را در Scaffolding Template انتخاب کنید . 

اضافه کردن Create View :
برای اضافه کردن Details View مراحل بالا را انجام دهید ، Event را در Model انتخاب کنید و Create را در Scaffolding Template انتخاب کنید . 

اضافه کردن Edit View :
برای اضافه کردن Details View مراحل بالا را انجام دهید ، Event را در Model انتخاب کنید و Edit را در Scaffolding Template انتخاب کنید . 

اضافه کردن Delete View :
برای اضافه کردن Details View مراحل بالا را انجام دهید ، Event را در Model انتخاب کنید و Delete را در Scaffolding Template انتخاب کنید . 


بعد از اضافه کردن تمام view ها ، دایرکتوری view شما باید شبیه زیر باشد .

ساختار پروژه بعد از اضافه کردن View ها :




حال که اضافه کردن viewها تکمیل شد ، برنامه را run میکنیم . 

Run Application :

برای پردازش برنامه URL : http://localhost:#####/ Event/Create  را وارد کنید . 
بعد از اجرای برنامه ما خواهیم دید که Costructor Injection چگونه اتفاق می افتد . 
با ضمیمه کردن debugger به Constructor شما میتوانید چک کنید که چه چیزی تزریق می شود . 

نمایش Debugging of EventController در زمان تزریق Constructor  :



بعد از نگاه کردن به پردازش debugging ، ما action Method create را فراخوانی میکنیم و آن یک view به ما باز میگردانند . 

Create View :



خب ، ما Constructor Injection را انجام دادیم . 
حال  نگاهی بر Property Setter Injection خواهیم داشت . 

Property Injection :

در اینجا ما Property با نام _Event ساختیم . برای inject کردن در property از صفت [inject] در بالای propertyای که میخواهیم ، استفاده میکنیم . 

مثال زیر را ببینید :

[Inject]  
public IEvent _Event { set; get; }  


نمایش Debugging of EventController در زمان تزریق Property :

اگر کمی با دقت نگاه کنید خواهید دید که ما Constructor را کامنت کردیم . و هنوز ما توانایی inject با استفاده از property inject را داریم . 


Method Injection :

در اینجا ما  Method Injection را ایجاد کردیم . برای استفاده از آن فقط کافیست که یک متد با یک نام منحصر بفرد  ایجاد کنید . ما نام آن را DemoMethod گذاشتیم و این متد یک interface را به عنوان پارامتر دریافت میکند ، بعد همه این کار ها فقط کافیست که [injerct] را به آن اضافه کنید . 

[Inject]  
public void DemoMethod(IEvent IEvent)  
{  
   _IEvent = IEvent;  
}  


بعد از وارد کردن داده ها ، داده ها را ذخیره میکنیم . وجود داده هادر جدول را تست میکنیم . 

[Result after Creating Event [Sql server :




از viewهای دیگر نیز با استفاده از روشی که گفته شد میتوان استفاده کرد .

آموزش asp.net mvc

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید