我想知道是否可以升级我用来支持延迟加载的基本 IoC 容器。因此,如果我已经注册了 IFoo,我希望 IoC 容器知道如何满足以下两个依赖项(第一个是 IoC 容器工作的标准方式,而第二个返回一个简单的委托,该委托在何时调用 IFoo 的容器它被调用)。
public Bar(IFoo x)
public Bar2(Func<IFoo> lazyFoo)
当我尝试编写实际执行此操作的代码时,问题就出现了。是否有可以编译以下伪代码的语法?
public T Resolve<T>()
{
if (T is Func<X>)
return (T) () => Resolve(typeof(X));
return (T)Resolve(typeof(T));
}
或者以另一种方式提出我的问题,如果我有一个类型T
,我如何检测它是否是一个实例Func<X>
,如果是,那么类型是X
什么?