我正在尝试注册一个开放的通用接口IService<T1>
,并使用以下部分打开的实现类Service<T0, T1>
来解决它。
在这种情况下,T0
将被修复,T1
和Service
中的IService
将是相同的。
理想情况下,它看起来像这样:
container.Register<IService<>, Service<ExplicitType,>>(Lifestyle.Singleton);
但那是不正确的c#。
我的问题是:
Service<ExplicitType,>
。我没有找到有关此问题的优秀文档。
答案 0 :(得分:0)
这当然是可行的,但您无法在C#中表达部分开放的泛型类型。您需要恢复为反射。您可以按如下方式指定部分打开的类型:
Type implementation =
typeof(Service<,>).MakeGenericType(
typeof(ExplicitType),
typeof(Service<,>).GetGenericTypeArguments()[1]));
简单注射器中的注册现在是儿童游戏:
container.Register(typeof(IService<>), implementation);
这有意义吗?
你的例子是非常普遍的&#39; (没有双关语意)所以很难从中得出结论,但对于部分开放的泛型类型有绝对好的用例。这就是Simple Injector为他们提供OOTB支持的原因。
我没有找到有关此问题的优秀文档。
文档实际上有information about this,但您在文档中称为&#34;部分关闭&#34;,这可能是您没有找到它的原因。