Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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
C# 仅使用类型参数注册IEnumerables的实现_C#_Dependency Injection_Simple Injector - Fatal编程技术网

C# 仅使用类型参数注册IEnumerables的实现

C# 仅使用类型参数注册IEnumerables的实现,c#,dependency-injection,simple-injector,C#,Dependency Injection,Simple Injector,我试图找出注册接口的特定实现的语法,但我就是不能(使用简单的注入器)使用它。我的接口签名如下所示: public interface IAdditionalDataService<TResult, TModel> 公共接口IAdditionalDataService 每当第一个类型参数是TModel类型的IEnumerable时,我想注册一个实现,例如: public class CompositeAdditionalDataService<TModel>

我试图找出注册接口的特定实现的语法,但我就是不能(使用简单的注入器)使用它。我的接口签名如下所示:

public interface IAdditionalDataService<TResult, TModel>
公共接口IAdditionalDataService
每当第一个类型参数是TModel类型的IEnumerable时,我想注册一个实现,例如:

public class CompositeAdditionalDataService<TModel>
                 : IAdditionalDataService<IEnumerable<TModel>, TModel>
公共类复合附加数据服务
:iaditionaldataservice
我该怎么做

我试过这个:

container.RegisterOpenGeneric(typeof(IAdditionalDataService<,>),
    typeof(CompositeAdditionalDataService<>));
container.RegisterOpenGeneric(typeof(IAdditionalDataService<IEnumerable<>,>),
    typeof(CompositeAdditionalDataService<>));
container.RegisterOpenGeneric(typeof(iaditionaldataservice),
类型(复合附加数据服务);
当我验证容器说没有注册
IAdditionalDataService
时,我得到一个错误,因此我的注册无效

我也试过:

container.RegisterOpenGeneric(typeof(IAdditionalDataService<,>),
    typeof(CompositeAdditionalDataService<>));
container.RegisterOpenGeneric(typeof(IAdditionalDataService<IEnumerable<>,>),
    typeof(CompositeAdditionalDataService<>));
container.RegisterOpenGeneric(typeof(iaditionaldataservice),
类型(复合附加数据服务);
但显然,这甚至不能编译,因为它不是有效的语法

所以我的问题是


如何注册我的实现,以便在请求IAdditionalDataService、TModel>时使用它,其中TModel是一个类型参数,因此它几乎可以是任何类型?

您应该将通用实现更改为以下内容:

public class CompositeAdditionalDataService<TCollectionResult, TModel>
    : IAdditionalDataService<TCollectionResult, TModel>
    where TCollectionResult : IEnumerable<TModel>
公共类复合附加数据服务
:iaditionaldataservice
其中TCollectionResult:IEnumerable
并登记如下:

// Simple Injector v3.x
container.Register(
    typeof(IAdditionalDataService<,>),
    typeof(CompositeAdditionalDataService<,>));

// Simple Injector v2.x
container.RegisterOpenGeneric(
    typeof(IAdditionalDataService<,>),
    typeof(CompositeAdditionalDataService<,>));
//简单注入器v3.x
集装箱。登记(
类型(IAdditionalDataService),
类型(复合附加数据服务);
//简单喷油器v2.x
container.RegisterOpenGeneric(
类型(IAdditionalDataService),
类型(复合附加数据服务);