Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics 如何使用Unity容器解析的泛型接口作为构造函数参数解析泛型类_Generics_Dependency Injection_Unity Container_Ioc Container_Service Locator - Fatal编程技术网

Generics 如何使用Unity容器解析的泛型接口作为构造函数参数解析泛型类

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

我不知道如何注册一个通用抽象类,该类在我的Unity(2.0)容器中具有注入的通用接口。以下是接口和类:

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) { ... }
    ...
}