依赖注入:是否存在延迟参数传递这样的事情?

时间:2017-04-26 16:32:20

标签: asp.net-mvc dependency-injection

免责声明:这是关于依赖注入的一般性问题,无需与任何特定产品/项目/ DI解决方案相关。这个问题绝不是要求比较DI解决方案之间的功能。

我在使用SimpleWebInjector的ASP.NET MVC 5项目中使用DI。一切都很酷,我的控制器有ctors,其参数值正确注入值,这些依赖关系有自己的ctors,使params注入正常。

现在这是一个特殊的场景:其中一个依赖项有一个ctor参数,只能注入一个提供给我的控制器的所有Actions的值。我怎么能做到这一点?这对DI来说是否可能?

2 个答案:

答案 0 :(得分:2)

  

其中一个依赖项有一个ctor参数,只能使用提供给我的控制器的所有Actions的值注入。

如果为操作提供了值,则表示它是运行时数据。不应将运行时数据注入组件的构造函数。这是一种反模式,如here所述。简而言之,该文章可以概括为:

  

在构建过程中不要将运行时数据注入应用程序组件中;它会导致歧义,使组合根变得更加复杂,并且使得验证DI配置的正确性变得非常困难。我的建议是让运行时数据流过构造对象图的方法调用。

本文给出了两个一般解决方案:

  
      
  1. 通过API的方法调用或
  2. 传递运行时数据   
  3. 从允许解析运行时数据的特定抽象中检索运行时数据。
  4.   

答案 1 :(得分:0)

了解我最喜欢的DI容器Castle Windsor如何提供您所需要的产品。

container.Register(
    Component.For<IDBContext>().ImplementedBy<CustomDBContext>()
             .DependsOn(Dependency.OnValue("connectionString", connectionString))
    );