ASP.net MVC依赖注入统一(DI容器);如何根据不同的控制器类型注入依赖别名(特定类型)

时间:2012-05-21 13:29:28

标签: c# asp.net-mvc asp.net-mvc-3 dependency-injection unity-container

我想根据控制器类型使用Unity或任何其他DI容器注入特定的依赖项。

以下是一个例子:

2个依赖项的类型为interface IAppLogger

1. NetworkLogger : IAppLogger
2. FileLogger : IAppLogger

现在低于2个控制器使用抽象IAppLogger消耗依赖性。

1. NetworkController depends on IAppLogger
2. FileController depends on IAppLogger

在我的MVC项目中,我安装了Unity和Unity.mvc3软件包。之后我得到了一个bootstrap.cs文件,我可以在其中注册类型。现在我该如何设置DependencyResolver来解决

IAppLogger to NetworkLogger for controller NetworkController 

AND

IAppLogger to FileLogger for controller FileController.

修改


如果App的内容是动态的,那么在每个控制器中查找依赖项类型将很难,而不是在服务定位器或解析器中执行它并且占用空间更少。在独立应用程序中,我可以在注册类型时使用别名来完成。

Container.RegisterType<IAppLogger, NetworkLogger>("Network"); 
Container.RegisterType<IAppLogger, FileLogger >("File"); 

IAppLogger flogger = Container.Resolve<IAppLogger>("File");     
IAppLogger nlogger = Container.Resolve<IAppLogger>("Network");

1 个答案:

答案 0 :(得分:1)

如果NetworkController始终与NetworkLogger一起使用,那么它应该取决于NetworkLogger,而不是IAppLogger。或者如果你愿意,可以在INetworkLogger上。

FileController同样如此。