2011-02-12 35 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>(); 

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