相关疑难解决方法(0)

找到.NET库的正确组合根

我在这里看到了关于这个论点的各种其他问题,最值得注意的是

依赖注入(DI)"友好"库

Ioc/DI - 为什么我必须在输入应用程序中引用所有层/组件?

和这篇文章(和其他各种材料).

但是,我不清楚将组合根放在库(DLL).NET项目中的哪个位置.该项目不属于本文中提到的任何特定类型.在桌面,控制台甚至Web应用程序中,这一点都是明确定义的.

我目前的方法是包装容器,寄存器类型并重新公开Resolve方法:

class DefaultBootstrapper : IBootstrapper {
  public Bootstrapper() {
    _container = new XXXContainer();
    RegisterTypes(_container);
  }

  public T Resolve<T>() where T : class {
    return _container.Resolve<T>();
  }

  // + other _container.Resolve() overloads

  private readonly XXXContainer _container;
}
Run Code Online (Sandbox Code Playgroud)

然后我阻止库消费者创建库的根实例(例如,定义内部构造函数),从而强制使用单例工厂:

class XYZFactory {
  static XYZFactory() {}

  private XYZFactory(IBootstrapper bootstrapper) {
    _bootstrapper = bootstrapper;
  }

  public static XYZFactory Instance {
    get { return Singleton; }
  }

  public ABCType CreateABCType(string param1) {
    return _bootstrapper.Resolve<ABCType>(param1, …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection inversion-of-control composition

8
推荐指数
1
解决办法
2664
查看次数

使用依赖注入进行内部操作的类库的最佳实践是什么?

在构建足够复杂的类库以使用内部依赖注入时,我应该注意什么?

假设它将使用Castle Windsor(作为示例),配置容器的最佳位置/方法是什么,假设该库将由简单的控制台应用程序(没有DI)使用,Web表单使用相同的容器( Castle Windsor)和使用不同容器(NInject)的网络应用程序?

c# dependency-injection inversion-of-control

6
推荐指数
1
解决办法
3326
查看次数