Generics 如何使用Unity容器解析的泛型接口作为构造函数参数解析泛型类
我不知道如何注册一个通用抽象类,该类在我的Unity(2.0)容器中具有注入的通用接口。以下是接口和类:Generics 如何使用Unity容器解析的泛型接口作为构造函数参数解析泛型类,generics,dependency-injection,unity-container,ioc-container,service-locator,Generics,Dependency Injection,Unity Container,Ioc Container,Service Locator,我不知道如何注册一个通用抽象类,该类在我的Unity(2.0)容器中具有注入的通用接口。以下是接口和类: public interface IReportFactory<in TEntity, out TReport> { ... } public class ExperienceReportBaseFactory : IReportFactory<Experience, ExperienceReportBase> { ... } public abstrac
public interface IReportFactory<in TEntity, out TReport>
{ ... }
public class ExperienceReportBaseFactory :
IReportFactory<Experience, ExperienceReportBase>
{ ... }
public abstract class ReportProvider<TEntity, TReport>
{
protected ReportProvider(
IReportFactory<TEntity, TReport> reportFactory)
{ ... }
...
}
public class ExperienceDetailsReportProvider
: ReportProvider<Experience, ExperienceReportBase>
{
public ExperienceDetailsReportProvider(
IReportFactory<Experience, ExperienceReportBase>
reportFactory)
: base(reportFactory) { ... }
...
}
公共接口IReportFactory
{ ... }
公共类ExperienceReportBaseFactory:
IReportFactory
{ ... }
公共抽象类ReportProvider
{
受保护的报表提供程序(
IReportFactory报告工厂)
{ ... }
...
}
公共类ExperienceDetailsReportProvider
:ReportProvider
{
公共体验式税务报告提供商(
IReportFactory
报告(工厂)
:base(reportFactory){…}
...
}
这是注册码:
Container.RegisterInstance(typeof(IReportFactory<Experience, ExperienceReportBase>), new ExperienceReportBaseFactory())
.RegisterType(typeof(ReportProvider<Experience, ExperienceReportBase>),
typeof (ExperienceDetailsReportProvider),
new InjectionConstructor(Container.Resolve(typeof (IReportFactory<Experience, ExperienceReportBase>))));
Container.RegisterInstance(typeof(IReportFactory),new ExperienceReportBaseFactory())
.RegisterType(typeof(ReportProvider),
类型(经验丰富的税务报告提供商),
新的注入构造函数(Container.Resolve(typeof(IReportFactory));
这是我的提供程序工厂,它尝试解析报表提供程序
:
公共类ReportProviderFactory:IReportProviderFactory
{
专用只读阅读器Vicelocator\u serviceLocator;
公共报告提供者工厂(IServiceLocator服务定位器)
{
_serviceLocator=serviceLocator;
}
公共报告提供程序Create()
其中TReport:ActiveReport
{
var报告提供者=
_GetService(typeof(ReportProvider))作为
报告提供者;
返回报告提供者;
}
}
我在
\u serviceLocator.GetService(…)
行上看到,“无法构造类型ReportProvider`2。您必须配置容器以提供此值。”。。。调用ReportProviderFactory.Create()
的客户端正在为TReport
指定不同的类型:
var reportProvider = _reportProviderFactory<Experience>.Create<ExperienceDetailsReport>();
var reportProvider = _reportProviderFactory<Experience>.Create<ExperienceDetailsReport>();
public class ExperienceReportBaseFactory : IReportFactory<Experience, ExperienceDetailsReport> { ... }
public class ExperienceDetailsReportProvider : ReportProvider<Experience, ExperienceDetailsReport>
{
public ExperienceDetailsReportProvider(IReportFactory<Experience, ExperienceDetailsReport> reportFactory) : base(reportFactory) { ... }
...
}