繁体   English   中英

在Unity中注册时是否可以指定可变长度的构造函数参数?

[英]Is it possible to specify variable-length constructor arguments when registering in Unity?

我有一个接口, IFoo和三个具体类: FooA : IFooFooB : IFooMultiFoo : IFoo

MultiFoo的构造函数如下所示:

public MultiFoo(params IFoo[] foos) { ... }

在Unity中注册MultiFoo时,我可以指定特定的分辨率覆盖吗? 我希望能够做到这样的事情:

container.RegisterType<IFoo, FooA>("Foo A");
container.RegisterType<IFoo, FooB>("Foo B");

container.RegisterType<IFoo, MultiFoo>(new ContainerControlledLifetime(),
    new ResolvedOverride<IFoo>("Foo A"),
    new ResolvedOverride<IFoo>("Foo B")
);

然后,它会在解析时将已解析的 FooA和已解析的FooB传递给构造函数:

new MultiFoo(new FooA(), new FooB())

params是编译器语法加糖,你实际上是将一个数组作为单个参数传递。 为了匹配你要配置容器,如下所示:

container.RegisterType<IFoo, MultiFoo>(new ContainerControlledLifetimeManager(),
    new InjectionConstructor(new ResolvedArrayParameter<IFoo>(new ResolvedParameter<IFoo>("Foo A"), new ResolvedParameter<IFoo>("Foo B"))));

Resolver覆盖在Resolve时使用,而不是在容器设置时使用。 使用resolve覆盖的等效代码如下所示:

container.RegisterType<IFoo, MultiFoo>(new ContainerControlledLifetimeManager());

var foo = container.Resolve<IFoo>(
    new ParameterOverride(
        "foos", 
        new ResolvedArrayParameter<IFoo>(new ResolvedParameter<IFoo>("Foo A"), new ResolvedParameter<IFoo>("Foo B"))));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM