使用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 …