2011-02-12 37 views
0

我目前正在使用IoC容器(城堡)注入依賴項到控制器中。這是可能的,因爲您需要創建一個自定義控制器工廠來啓用依賴注入。.NET MVC - 在哪裏使用依賴注入?

依賴注入的其他例子是什麼?在一個MVC應用程序中的哪一點你會使用它,以及「工廠」在哪裏發揮作用?

+0

在測試或運行期間? – 2011-02-12 16:10:31

+0

運行期間。 – Ropstah 2011-02-12 16:53:15

回答

3

我正在使用Ninject。在我的項目中:

  • 服務層對象被注入控制器(使用構造函數)。
  • 存儲庫注入服務層對象(使用構造函數)。
  • ObjectContext注入到存儲庫(使用構造函數)。
  • web.config設置被封裝成一個類,它實現了IAppSettings接口,然後被注入服務層。
  • NinjectActionInvoker注入爲IActionInvoker。它負責將注入服務注入ActionFilters。
  • 我有自己的IPrincipal接口實現,它被注入服務層,而不是參考HttpContext.Current.User

實施例使用Ninject:

public class UserService : GenericService<User>, IUserService 
{ 
    public ISettingService SettingService { get; set; } 
    public ICTEmailSender CTEmailSender { get; set; } 
    public ICTSettings CTSettings { get; set; } 
    public ICTPrincipal User { get; set; } 
} 

Ninject規則:

Bind<ICTPrincipal>().ToMethod(c => (ICTPrincipal)HttpContext.Current.User).OnlyIf(a => HttpContext.Current.User is ICTPrincipal); 
Bind<ICTEmailSender>().To<CTEmailSender>(); 
Bind<ICTSettings>().To<CTSettings>(); 

不僅服務被注入的控制器,但服務的部分被注入其中。它使服務更可測試。我相信它可以很容易地移植到城堡。