使用Unity注入数组

Aar*_*ide 10 c# dependency-injection unity-container

我的目标是构造函数注入实现接口的对象数组.

以下是我目前的方式.

Container

        .RegisterInstance<Company>(ParseCompany(args[1])

        .RegisterInstance<eTargets>(ParseTargets(args[2]))

        .RegisterInstance<ILoader[]>(new ILoader[] {
            Container.Resolve<CustomerLoader>(),
            Container.Resolve<PaymentLoader(),
            Container.Resolve<InvoiceLoader() 
        });
Run Code Online (Sandbox Code Playgroud)

以这种方式调用容器配置中的Resolve是典型的,还是有更标准的方法来完成同样的事情?

Mar*_*ann 28

Unity 本身理解数组,所以没有理由让它变得如此复杂.只需注册ILoaders您想要包含并正常解析对象图.自动接线将负责其余部分:

container.RegisterType<ILoader, FooLoader>("foo");
container.RegisterType<ILoader, BarLoader>("bar");
container.RegisterType<ILoader, BazLoader>("baz");

var c = container.Resolve<MyConsumer>();
Run Code Online (Sandbox Code Playgroud)

假设MyConsumer构造函数定义如下:

public MyConsumer(ILoader[] loaders)
Run Code Online (Sandbox Code Playgroud)

但是,您应该知道(出于一些不可思议的原因)Unity仅以这种方式包含命名组件.该默认组件:

container.RegisterType<ILoader, Loader>();
Run Code Online (Sandbox Code Playgroud)

包含在数组中,因为它没有名字.

  • @BrunoBrant'不可思议'因为没有其他DI容器那样工作.有关详细信息,请参阅[我的书](http://amzn.to/12p90MG). (4认同)