1

我想根据控制器类型使用 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 

IAppLogger to FileLogger for controller FileController.

编辑:


如果应用程序的事情是动态的,那么在每个控制器中更改依赖类型将比在服务定位器或解析器中执行它更困难,并且占用空间更少。在独立应用程序中,我可以在注册类型时使用别名。

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

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

1 回答 1

1

ifNetworkController应该始终使用 a NetworkLoggerthen 它应该依赖于NetworkLogger,而不是 on IAppLogger。或者,INetworkLogger如果你愿意,也可以打开。

也是如此FileController

于 2012-05-21T13:49:26.267 回答