仅使用类型参数注册 IEnumerables 的实现
Registration of implementation for IEnumerables only using type parameters
我正在尝试弄清楚注册接口的特定实现的语法,但我无法弄清楚(使用 Simple Injector)。我的界面签名如下所示:
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<,>));
我正在尝试弄清楚注册接口的特定实现的语法,但我无法弄清楚(使用 Simple Injector)。我的界面签名如下所示:
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<,>));