使用unity xml config注册具有嵌套generics的接口
如果我有一个实现通用接口的类,可以使用unity xml配置来配置它。
public interface IReader { } public class Fund { } public class FundReader : IReader { }
和统一xml:
这只是使用以下代码:
var container = new UnityContainer().LoadConfiguration(); var fundReader = container.Resolve<IReader>();
但是,在某些情况下,阅读器中使用的类型周围有一个包装器。 例如,添加以下两个类:
public class Wrapper { } public class WrappedFundReader : IReader<Wrapper> { }
如果我将以下内容添加到unity配置:
然后尝试使用以下方法解决它:
var wrappedReader = container.Resolve<IReader<Wrapper>>();
我得到以下exception:
InvalidOperationException - The current type, TestUnityIssue.IReader`1[TestUnityIssue.Wrapper`1[TestUnityIssue.Fund]], is an interface and cannot be constructed. Are you missing a type mapping?
我可以通过使用代码而不是xml来配置它来解决这个问题:
container.RegisterType<IReader<Wrapper>, WrappedFundReader>();
或者我可以创建一个介于其间并使用它的接口:
public interface IWrappedReader : IReader<Wrapper> { } public class WrappedFundReader : IWrappedReader
并且配置将更改为:
它仍然会给我一个我可以IReader<Wrapper>
为IReader<Wrapper>
的实例,但似乎我应该能够使用unity配置工作。
我缺少什么让这项工作?
(如果还尝试创建特定的别名,并且无法使其工作)
别名对我有用……
这两个都解决了……
var fundReader = container.Resolve>(); var wrappedReader = container.Resolve>>();
并且根据你的情况,你可能能够获得少于完整的AssemblyQualifiedName …