是否可以在不引用容器的情况下解决类库中的依赖关系?

时间:2017-01-19 10:58:19

标签: c# .net dependency-injection autofac ioc-container

解决方案项目:

  • ClassLibrary.Abstract
    • 有很多美味的服务
  • ClassLibrary.Concrete
    • 包含上述服务的实现
  • MvcWebApp
    • 引用上述类
    • 包含组合词根

所有东西都在组合根中注册,所以MvcWebApp显然引用容器,在我的例子中它是Autofac,但我认为它不重要。

问题: 在类库中运行时解析服务的正确方法(如果有的话)是什么,而不是在解决方案的任何地方添加对容器的引用,同时仍然能够控制生命周期范围?

1 个答案:

答案 0 :(得分:0)

如果服务需要子服务实现

  • 服务可以自己创建子服务
    • (a)通过调用子服务的具体构造函数(no ioc / di)
    • (b)要求容器这样做。
    • (c)服务可以提供一些工厂或服务定位器。
  • (d)service-constructor具有所需子服务的参数/属性。有一个初始化模块通过使用参数调用构造函数来连接所有需要的服务。

你的问题:是否有可能避免(b)?

如果在运行时延迟解析很重要,则必须执行(c)

我更喜欢(d),但这不是延迟加载。

您希望您的lib自己创建服务,而lib不应该引用您的ioc-container autofac。

因此您必须使用方法createService<T>releaseService<T>

隐藏工厂接口后面的autofac

lib知道界面

您的factoryClass使用autofac实现factoryInterface。