نحوه استفاده از 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
- 2k بازدید
- 4 تشکر