我想使用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能够足够聪明地找到基于泛型的特定类。有可能做这样的事吗?
答案 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();
它会自动注册实现此基类的所有通用派生类。