c# - 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'.
解决方案
你不能这样做:
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));
我以前从未使用过像您这样的构造,但我认为您不需要声明所有子参数。
推荐阅读
- sql - 我在这个查询中遇到了多个 AND/OR 条件。我是关闭还是有更简单的解决方案?
- google-apps-script - 如何使用 Apps 脚本在工作表侧边栏中发送通知(在新表单提交时)
- android - 设计 - 使用 com.github.mikephil.charting
- vue.js - vue 的 vue-dat-gui 不适用于“无法读取未定义的属性 '_c'”错误消息
- npm - 如何解决 npm install 的错误代码 1
- javascript - Chrome.storage.sync.get 在另一个 .js 文件中
- flutter - Flutter 中的 const 构造函数和 const 对象
- javascript - 在多个画布的 p5js 实例模式下,未定义 p5 对象
- c# - 为什么 File.ReadAllLinesAsync 会阻止 WPF 中的 UI 线程?
- orleans - 奥尔良谷物的一对多组合