c# - 如何在 LightInject 中注册一个接受参数的开放泛型?
问题描述
我有以下通用类,这取决于IBar
:
public class Foo<T> : IFoo<T>
{
public Foo(IBar bar, int value) { }
...
}
理想情况下,我会在LightInject中使用类似的东西注册它:
container.Register<IBar, Bar>();
container.Register<int, IFoo<>>((factory, value) => new Foo<>(factory.GetInstance<IBar>(), value))
这样在运行时,我就可以使用提供的值获取 IFoo 的实例:
container.GetInstance<IFoo<SomeType>>(42);
但是由于使用了开放的泛型,这段代码显然无法编译IFoo<>
:
container.Register<int, IFoo<>>((factory, value) => new Foo<>(...))
如果只有 Foo 不是通用类,那么根据官方文档,这一切都可以正常工作:https ://www.lightinject.net/#parameters 。
有通用类的解决方案吗?这可以用任何其他方式编写并且仍然可以实现相同的目标吗?我尝试使用以下语法,但我失去了使用接受值的委托的能力(或者至少我不知道该怎么做)......
container.Register(typeof(IFoo<>), typeof(Foo<>));
任何想法?
解决方案
推荐阅读
- amazon-s3 - 您的 Amazon Music 市场没有为此设备正确配置
- node.js - REST API 的 Flash 消息
- ruby-on-rails - FactoryBot 如何为相互关联的模型创建工厂
- git - 我应该在开发完全完成之前合并 dev 和 master 分支吗?
- c# - 线程池 ThreadStart 和 Finished 问题 xamarin iOS
- python - 如何加快从 pandas.DataFrame .to_sql 插入
- angular - 无法读取未定义的属性“findIndex”
- firebase - Firebase 云函数 -@google-cloud/storage 初始化
- sql - 从 SQL Server 中的两个不同服务器获取数据
- python - Python 3数组,反转多边形点