NINJECT LÀ GÌ

 - 
Trong bài viết này, tôi đã gợi ý biện pháp áp dụng Dependency Injection vào dự án ASP.NET MVC. Bài viết này dựa trên những tư liệu tsi mê khảo: Programing in ASP..NET MVC, ASP..NET MVC 4 in Action.Trước không còn, chúng ta sẽ đi sơ qua những khái niệm: IoC là gì, cách vận dụng IoC vào dự án Web, ví dụ.

Bạn đang xem: Ninject là gì

IoC là gì?

IoC là 1 trong nguyên lý thi công danh tiếng với mục tiêu làm cho bớt sự dựa vào giữa những tầng, các thành phần cùng các lớp bằng cách nghịch đảo luồng điểu khiển của vận dụng.Trong phương pháp lập trình truyền thống lâu đời, câu hỏi kiểm soát điều hành luồng tiến hành công tác và những lớp bé được thực hiện 1 cách vô cùng ngặt nghèo thì IoC lại bóc mã thực thi tự mã sự việc cụ thể. Cách tiếp cận này chất nhận được những yếu tắc khác nhau được cải tiến và phát triển một bí quyết hòa bình.Ví dụ: vào vận dụng MVC, lớp Model, view và controller được thiết kế và xây cất độc lập cùng nhau.Hai triển khai phổ cập của nguyên lý IoC là Dependency Injection (chống lại sự prúc thuộc) cùng service location.

Xem thêm: Teencode Là Gì? Nguyên Nhân Hình Thành "Hot Trend" Teencode Nguồn Gốc Của Teencode


*

*

*

Các thư viện Dependency Injection: Ninject, Unity, StructureMap, Castle Windsor, MEF...

Xem thêm: Tròn Mắt Với Cỗ Máy " Uncen Là Gì, Nghĩa Của Từ Uncensored, Censored Hay U…

Dependency Resolver vào ASP..NET MVC

Một trong những tính năng vượt trội của ASPhường.NET MVC 3 là dependency resolver. Đây là lớp thực thi của quy mô Service Locator, có thể chấp nhận được framework call DI Container Khi nó buộc phải làm việc với một lớp thực thi xuất phát từ một phong cách cụ thể.Dependency Resolver có tất cả 2 thành phần: lớp tĩnh DependencyResolver dùng để làm xử lý sự dựa vào và 1 lớp interface IDependencyResolver.Một thắc mắc được đưa ra, là làm sao vận dụng nó vào ASP..NET MVC, ví dụ trong ví dụ này là áp dụng Dependency Injection vào Controller.Trước tiên, chúng ta hãy chu đáo 1 ví dụ đơn giản và dễ dàng. Trong ví dụ này, chúng ta chỉ mang lại hiện tại câu Hello World được rước tự MessageRepositorypublic interface IMessageRepository string GetMessage();public class MessageRepository: IMessageRepository public string GetMessage() return "Hello World"; HomeController.cspublic class HomeController : Controller IMessageRepository _messageRepo; public HomeController(IMessageRepository messageRepo) _messageRepo = messageRepo; // // GET: /Home/ public ActionResult Index() var result = _messageRepo.GetMessage(); return View(model: result); HomeController.cs
*

*

Ngulặng nhân là vì DefaultControllerActivator đề xuất controller có cách thức khởi tạo thành ko tmê mẩn số. Để khắc phục và hạn chế vấn đề đó, bọn họ tất cả 2 cách: một là sinh sản custom controller factory thực hiện DI container, 2 là implement interface IDependencyResolver. Các chúng ta nên chọn cách 2.
public class NinjectDependencyResolver: IDependencyResolver private readonly IKernel _kernel; public NinjectDependencyResolver(IKernel kernel) _kernel = kernel; AddBinding(); public object GetService(Type serviceType) return _kernel.TryGet(serviceType); public IEnumerable GetServices(Type serviceType) try return _kernel.GetAll(serviceType); catch (Exception) return new List(); private void AddBinding() _kernel.Bind().To(); Đăng cam kết Dependency Resolver trong ASPhường.NET MVCpublic class MvcApplication : System.Web.HttpApplication protected void Application_Start() IKernel kernel = new StandardKernel(); DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel)); AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); Các chúng ta có thể thiết lập ví dụ tại: MediaFireChúc chúng ta thành công