2013-03-11 37 views
7

我在爲使用Ninject用asp.net mvc的關於如何處理文檔提供.NET衆多通過谷歌做損失4在ASP.NET MVC使用Ninject當控制器工廠neccessary 4

首先,我想知道控制器工廠是否需要在asp.net中。

還有,就是構造函數注入真是我們所能做的依賴注入MVC​​ 4,因爲財產注入和方法注入似乎並不當我使用他們與我的控制器

回答

9

我不是Ninject的專家一起工作的唯一途徑但據我所知,我只用它將我的DataSource Interface和我的EfDb Class鏈接到我的應用程序的其餘部分。

如果你需要有大約Ninject嘗試建立一個真正的應用程序一本好書: Pro ASP.NET MVC 3 Framework, Third Edition

Pro Asp.Net Mvc 4

有代碼非常幾行我通常關心

public class NinjectControllerFactory : DefaultControllerFactory 
{ 
    private IKernel ninjectKernel; 

    public NinjectControllerFactory() 
    { 
     ninjectKernel = new StandardKernel(); 
     AddBindings(); 
    } 

    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) 
    { 
     return controllerType == null 
        ? null 
        : (IController) ninjectKernel.Get(controllerType); 
    } 

    private void AddBindings() 
    { 
     ninjectKernel.Bind<IDataSource>().To<EfDb>(); 
    } 
} 

然後註冊您的NinjectControllerFactoryGlobal.asax.cs有:

ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());

正如你所看到的,這個類使用Method Injection使用private void AddBindings()。這使得它非常容易,如果你是以下Test Driven Development (TDD)

+0

但是我讀了一些地方,如果你的應用程序繼承自NinjectHttpApplication並重寫適當的方法,控制器將通過IOC容器自動地具有依賴關係statisfied。 – 2013-03-11 15:54:53

+0

@PeterEdike每個人都有他們自己的編寫代碼的方式,這個遊戲全部是關於拾取一種可以工作並在路上改進的風格。我建議你閱讀我提到的那些書之一。 – Komengem 2013-03-11 19:20:15

+0

是的,我已經得到了這本書。我現在正在閱讀它 – 2013-03-12 16:13:28

2

在這裏看到的文檔: https://github.com/ninject/ninject.web.mvc/wiki/Dependency-injection-for-controllers「,即必須做的唯一一件事就是配置Ninject綁定其依賴控制器本身將Ninject發現即使而無需添加綁定。「

NInject會自動設置您的控制器依賴關係(假設它具有這些類型的綁定)。

+0

我正在使用MVC5/WebApi2,並且此方法對我無效。 @Komengem的建議奏效了。 – codeMonkey 2017-02-09 07:43:17