基于泛型解析抽象类

时间:2017-02-06 14:05:43

标签: c# generics unity-container

我想使用Unity解析一个抽象类。 抽象类具有某些泛型的实现。例如:

public abstract class Iface<S, T> where S : SomeClass where T : OtherClass

public class face : Iface<SomeClassExample, OtherClassExample>

然后我想执行:

UnityContainer.Resolve<Iface<SomeClassExample, OtherClassExample>>();

但是它给出了错误Exception is:

  

InvalidOperationException - 无法创建抽象类的实例。

这很明显,因为我想创建一个抽象类。我希望Unity能够足够聪明地找到基于泛型的特定类。有可能做这样的事吗?

2 个答案:

答案 0 :(得分:0)

您需要明确要求它解析到您的face课程。只是查看错误消息,它正在尝试创建Iface<SomeClassExample, OtherClassExample>

的实例
UnityContainer.Resolve<face<SomeClassExample, OtherClassExample>>();

如果您想使用Iface作为接口 - 创建一个接口并注册它

答案 1 :(得分:0)

您需要明确注册face class并使用正确的泛型映射它。

UnityContainer.RegisterType<Iface<SomeClassExample, OtherClassExample>, face>();

尽管如此,我相信Unity应该可以自动识别属于某些泛型的正确类...

编辑: 实际上有办法!

UnityContainer.ConfigureAutoRegistration().Include(type => type.ImplementsOpenGeneric(typeof(Iface<,>)), Then.Register().AsFirstInterfaceOfType()).ApplyAutoRegistration();

它会自动注册实现此基类的所有通用派生类。