【问题标题】:ASP.net MVC dependency injection with unity(DI container); how to inject dependency alias(specific types) based on the different controller types具有统一性的 ASP.net MVC 依赖注入(DI 容器);如何根据不同的控制器类型注入依赖别名(特定类型)
【发布时间】:2012-05-21 13:29:28
【问题描述】:

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

下面是一个例子:

这两个依赖的类型是接口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");

【问题讨论】:

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


    【解决方案1】:

    如果NetworkController 应该始终与NetworkLogger 一起运行,那么它应该依赖于NetworkLogger,而不是IAppLogger。或者如果你愿意,也可以在INetworkLogger 上。

    FileController 也是如此。

    【讨论】:

    • 这个想法是在模块的服务定位器端提供更高级别的抽象和更多控制。如果应用程序的事情是动态的,那么在每个控制器中更改依赖类型将比在服务定位器或解析器中执行它更难,并且占用空间更少。在独立应用程序中,我可以在注册类型时使用别名。 Container.RegisterType&lt;IAppLogger, NetworkLogger&gt;("Network")'; Container.RegisterType&lt;IAppLogger, FileLogger &gt;("File"); IAppLogger flogger = Container.Resolve&lt;IAppLogger&gt;("File"); 'IAppLogger nlogger = Container.Resolve&lt;IAppLogger&gt;("Network");
    • 想到的另一件事是IAppLogger 应该有两个方法LogToFile(string msg); 和LogToNetwork(string msg); 然后适当的控制器将调用该方法来登录文件或通过网络登录。这将打破控制器关于如何记录消息的抽象。但在这种情况下,主要关注的是每个控制器我必须用文件记录器和网络记录器实例化IAppLogger,并且依赖性变得很重。
    猜你喜欢
    • 1970-01-01
    • 2012-04-23
    • 2014-01-02
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    相关资源
    最近更新 更多