c# - 统一.NET : List of dependencies

标签 c# dependency-injection unity-container ioc-container

是否可以在 Unity 或其他类型的 IoC 库中像这样注入(inject)依赖项列表

public class Crawler 
{
    public Crawler(IEnumerable<IParser> parsers) 
    {
         // init here...
    }
}

这样我就可以在我的容器中注册多个IParser,然后解析它们。

这可能吗?谢谢

最佳答案

这是可能的,但您需要应用一些解决方法。首先,您需要在 Unity 容器中为每个 IParser 注册一个名称。其次,您需要在容器中注册从 IParser[]IEnumerable 的映射。否则容器无法将解析器注入(inject)构造函数。这是我以前的做法。

IUnityContainer container = new UnityContainer();

container.RegisterType<IParser, SuperParser>("SuperParser");
container.RegisterType<IParser, DefaultParser>("DefaultParser");
container.RegisterType<IParser, BasicParser>("BasicParser");
container.RegisterType<IEnumerable<IParser>, IParser[]>();
container.RegisterType<Crawler>();

Crawler crawler = container.Resolve<Crawler>();

我通过引入一个工厂来放弃这个解决方案,它封装了统一来构造所需的类型。在您的情况下,我会这样做。

public interface IParserFactory{
  IEnumerable<IParser> BuildParsers();
}

public class UnityParserFactory : IParserFactory {
  private IUnityContainer _container;

  public UnityParserFactory(IUnityContainer container){
    _container = container;
  }

  public IEnumerable<IParser> BuildParsers() {
    return _container.ResolveAll<IParser>();
  }
}

public class Crawler {
  public Crawler(IParserFactory parserFactory) {
     // init here...
  }
}

有了它,你可以按如下方式注册类型:

IUnityContainer container = new UnityContainer();

container.RegisterType<IParser, SuperParser>();
container.RegisterType<IParser, DefaultParser>();
container.RegisterType<IParser, BasicParser>();
container.RegisterType<IParserFactory, UnityParserFactory>();

Crawler crawler = container.Resolve<Crawler>();

关于c# - 统一.NET : List of dependencies,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7483308/

相关文章:

c# - 如何在异常中显示对象列表?

c# - 正则表达式获取字符后的字符串

android - 使用 Dagger 2 注入(inject) Androidx Activity

c# - DBContext 不包含条目 : Cannot load related data 的定义

c# - 为什么 InterfaceInterceptor 不比 TransparentProxyInterceptor 快?

c# - 在运行时更新 DataGridView

c# - sealed 关键字会影响编译器对强制转换的看法

go - golang 中的依赖注入(inject)

dependency-injection - 使用 Unity IoC 注册和解析 SignalR 集线器

wcf - web.config 在 WCF 服务的 Unity 依赖注入(inject)中应该是什么样子的?