我有一个界面:
public interface IFileRetriever<THeader, TBody, TTailer>
where THeader : IFileRow
where TBody : IFileRow
where TTailer : IFileRow {
IRetrievedFile<THeader, TBody, TTailer> Retrieve(string fileName);
}
这是一个子类:
public class FileRetriever<THeader, TBody, TTailer> : IFileRetriever<THeader, TBody, TTailer>
where THeader : IFileRow, new()
where TBody : IFileRow, new()
where TTailer : IFileRow, new()
{
private readonly IRetrievedFile<THeader, TBody, TTailer> retrievedFile;
public FileRetriever(IRetrievedFile<THeader, TBody, TTailer> retrievedFile)
{
this.retrievedFile = retrievedFile;
}
public IRetrievedFile<THeader, TBody, TTailer> Retrieve(string fileName)
{
//do some thing
return null;
}
}
当我尝试在Unity中注册时,
container.RegisterType<IFileRetriever<IFileRow, IFileRow, IFileRow>, FileRetriever<ReturnCheckHeader, ReturnCheckBody, ReturnCheckTailer>>(
new InjectionConstructor(
new ResolvedParameter<IRetrievedFile<ReturnCheckHeader, ReturnCheckBody, ReturnCheckTailer>>()
));
ReturnCheckHeader,ReturnCheckBody,ReturnCheckTailer是“ IFileRow”的子类
我得到一个错误:
类型'FileRetriever'不能用作类型参数'TTo' 通用类型或方法'UnityContainerExtensions.RegisterType(IUnityContainer,params InjectionMember [])'。没有隐含 从“ FileRetriever”到“ IFileRetriever”的引用转换。
答案 0 :(得分:0)
你不能只是做
var container = new UnityContainer();
//ensure the repository is disposed after each request by using the lifetime manager
container.RegisterType<IFileRetriever, FileRetriever>(new HierarchicalLifetimeManager());
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
我以前从未使用过像您这样的构造,但是我认为您不需要声明所有子参数。