首页 > 解决方案 > 如何在 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<>));

任何想法?

标签: c#genericsdependency-injectionlight-injectopen-generics

解决方案


推荐阅读