I have a interface:
public interface IFileRetriever<THeader, TBody, TTailer>
where THeader : IFileRow
where TBody : IFileRow
where TTailer : IFileRow {
IRetrievedFile<THeader, TBody, TTailer> Retrieve(string fileName);
}
And here is a sub class:
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;
}
}
When I try to Register it in Unity,
container.RegisterType<IFileRetriever<IFileRow, IFileRow, IFileRow>, FileRetriever<ReturnCheckHeader, ReturnCheckBody, ReturnCheckTailer>>(
new InjectionConstructor(
new ResolvedParameter<IRetrievedFile<ReturnCheckHeader, ReturnCheckBody, ReturnCheckTailer>>()
));
ReturnCheckHeader,ReturnCheckBody,ReturnCheckTailer is a sub class of "IFileRow"
I get an error:
The type 'FileRetriever' cannot be used as type parameter 'TTo' in the generic type or method 'UnityContainerExtensions.RegisterType(IUnityContainer, params InjectionMember[])'. There is no implicit reference conversion from 'FileRetriever' to 'IFileRetriever'.
Couldn't you just do:
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));
I've never used a construct like yours before, but I don't think you need to declare all of the sub-parameters.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.