如何使用Unity的名称动态注册泛型类?

Tim*_*Tim 5 c# generics ioc-container inversion-of-control unity-container

我有一个包含很多类(300+)和BaseClass的程序集,我希望注册一个带接口的泛型类.

如果要解析接口的对象数组,则必须通过{ Name } 注册.我想自动在MainViewModel中有一个对象数组.

有没有办法通过反射自动化这个?有什么建议?

示例(伪):

public class BaseClass
{
   public void doFoo();
}

public ClassNumber001 : BaseClass
{
}
public ClassNumber002 : BaseClass
{
}

public interface ISuperman
{
}

public class Superman : ISuperman where T : BaseClass
{
}

public MainViewModel(IEnumerable<ISuperman> lotsofSuperman)
{
}
Run Code Online (Sandbox Code Playgroud)

手工实例:

container.RegisterType<ISuperman, Superman <ClassNumber001>>("ClassNumber001");
container.RegisterType<ISuperman, Superman <ClassNumber002>>("ClassNumber002");
container.RegisterType<IEnumerable<ISuperman>, ISuperman[]>();
Run Code Online (Sandbox Code Playgroud)

gas*_*ini 1

这是我想到的可能对你有用的东西......

您可以按如下方式注册类型,并且应该适用于open generic

container.RegisterType(typeof(ISuperman<>), typeof(Superman<>), ... );
Run Code Online (Sandbox Code Playgroud)

注册通用参数和类型

希望这可以帮助!