简体   繁体   中英

Unity RegisterType() Error: there is no implicit reference conversion

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM