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

本文关键字:类型 注入 依赖 控制器 net 别名 MVC DI ASP 容器 何根 | 更新日期: 2023-09-27 18:34:44

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

下面是一个示例:

2 个依赖项的类型为 接口IAppLogger

1. NetworkLogger : IAppLogger
2. FileLogger : IAppLogger

现在,以下 2 个控制器使用抽象 IAppLogger 的依赖项。

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

在我的MVC项目中,我已经安装了Unity和Unity.mvc3软件包。之后,我得到了一个引导.cs文件,我可以在其中注册类型。现在我应该如何设置依赖项解析程序来解析

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");

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

如果NetworkController应该始终使用NetworkLogger操作,那么它应该取决于NetworkLogger,而不是IAppLogger。或者如果你愿意,也许在INetworkLogger

FileController也是如此.