C# 使用Unity注册类型以使用需要参数数组的构造函数

C# 使用Unity注册类型以使用需要参数数组的构造函数,c#,.net,dependency-injection,unity-container,C#,.net,Dependency Injection,Unity Container,给定以下构造函数签名: public MyClass(Class1 arg1, params Class2[] arg2) public MyClass(Class1 arg1, Class2 arg2, Class2 arg3) 如何使用InjectionConstructor向Unity注册MyClass,并传入特定的命名类型 我尝试了以下方法: unityContainer.RegisterType<IMyClass, MyClass>(new InjectionConst

给定以下构造函数签名:

public MyClass(Class1 arg1, params Class2[] arg2)
public MyClass(Class1 arg1, Class2 arg2, Class2 arg3)
如何使用InjectionConstructor向Unity注册MyClass,并传入特定的命名类型

我尝试了以下方法:

unityContainer.RegisterType<IMyClass, MyClass>(new InjectionConstructor(typeof(Class1), new ResolvedParameter<IClass2>("name1"), new ResolvedParameter<IClass2>("name2")))

我通过重载MyClass构造函数解决了这个问题。有没有办法在不重载构造函数的情况下做到这一点?

因为它似乎不喜欢直接列出“Class2”实例,所以是否可以将它们显式设置为数组(从而显式匹配
Class1,Class2[]
)的构造函数签名:

unityContainer.RegisterType<IMyClass, MyClass>(new InjectionConstructor(typeof(Class1), new Class2[]{new ResolvedParameter<IClass2>("name1"), new ResolvedParameter<IClass2>("name2")}))
unityContainer.RegisterType(新注入构造函数(typeof(Class1),新Class2[]{new ResolvedParameter(“name1”),new ResolvedParameter(“name2”)}))

首先为什么要尝试使用
注入构造函数?Unity知道如何处理开箱即用的阵列

params
关键字只是编译器的一些语法糖。在封面下,
args2
只是一个简单的数组

[TestMethod]
公共void TestMethod1()
{
var container=new UnityContainer();
//如果您必须使用InjectionConstructor,这应该可以实现
//container.RegisterType(
//新的注入构造函数(typeof(Class1),typeof(Class2[]);
container.RegisterType(
新的注入构造函数(typeof(Class1),typeof(Class2[]);
容器。注册表类型(“1”);
容器。注册表类型(“2”);
容器。注册表类型(“3”);
var myClass=container.Resolve()作为myClass;
Assert.IsNotNull(myClass);
Assert.IsNotNull(myClass.Arg2);
AreEqual(3,myClass.Arg2.Length);
}
接口IMyClass
{
}
类MyClass:IMyClass
{
公共类1 Arg1{get;set;}
公共类2[]Arg2{get;set;}
公共MyClass(类1 arg1,参数类2[]arg2)
{
Arg1=Arg1;
Arg2=Arg2;
}
}
一班
{
}
二级
{
}

更新

如果您仅使用部分命名注册,则必须使用
resolvedarray参数

container.RegisterType(
新注入构造函数(
类型(类别1),
新参数(
新解析参数(“1”),
新的解析参数(“2”);

Brrr!这非常难看,但应该可以解决您的问题。

恐怕这不起作用,因为数组被声明为Class2类型,但初始化它的对象是ResolvedParameter类型。如果我从数组定义中删除对象类型(即new[]{…}),那么它将查找一个接受ResolvedParameters数组的构造函数!谢谢我使用注入构造函数是因为我有几个IClass2的实现,我只将其中的一些传递给MyClass构造函数。如果有更好的方法,请告诉我!