نحوه استفاده از Ninject framework در MVC
پنجشنبه 11 شهریور 1395در این مقاله ، هدف این است که نگاهی بر چگونگی استفاده از 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
- ASP.net MVC
- 3k بازدید
- 4 تشکر