仅使用类型参数注册IEnumerables的实现
本文关键字:IEnumerables 实现 注册 类型参数 | 更新日期: 2023-09-27 18:04:05
我试图找出语法来注册一个接口的特定实现,我只是不能弄清楚(使用简单的注入器)。我的接口签名是这样的:
public interface IAdditionalDataService<TResult, TModel>
我想在第一个类型参数是TModel类型的IEnumerable时注册一个实现,例如:
public class CompositeAdditionalDataService<TModel>
: IAdditionalDataService<IEnumerable<TModel>, TModel>
我该怎么做呢?
我试过了:
container.RegisterOpenGeneric(typeof(IAdditionalDataService<,>),
typeof(CompositeAdditionalDataService<>));
当我验证容器时说没有IAdditionalDataService<List<User>, User>
的注册时,我得到一个错误,所以我的注册没有工作。
我也试过这个:
container.RegisterOpenGeneric(typeof(IAdditionalDataService<IEnumerable<>,>),
typeof(CompositeAdditionalDataService<>));
但是这显然不能编译,因为这不是有效的语法。
我的问题是
我如何注册我的实现,所以它是使用每当IAdditionalDataService, TModel>被请求,其中TModel是一个类型参数,所以它可以是几乎任何东西?
您应该将您的泛型实现更改为:
public class CompositeAdditionalDataService<TCollectionResult, TModel>
: IAdditionalDataService<TCollectionResult, TModel>
where TCollectionResult : IEnumerable<TModel>
,注册如下:
// Simple Injector v3.x
container.Register(
typeof(IAdditionalDataService<,>),
typeof(CompositeAdditionalDataService<,>));
// Simple Injector v2.x
container.RegisterOpenGeneric(
typeof(IAdditionalDataService<,>),
typeof(CompositeAdditionalDataService<,>));