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),
类型(复合附加数据服务);