我有以下通用类,这取决于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<>));
任何想法?