DryIoc 用函数解析
DryIoc resolve with a func
我正在尝试将对象解析为 Func<>
的结果。
但是我不知道该怎么做。
例如,这里我有一个变量(函数参数)lazyInt
(这可能是某种长 运行 计算的结果)并且在可能的稍后之前不需要该结果用法。
private Demo(Container c, Func<int> lazyInt) : base(c)
{
_container = c;
c.Register<int>(made: Made.Of(/*???*/));
}
我尝试了一些使用ServiceInfo.Of
等,但暂时没有成功。
怎么做到的?
您需要使用 RegisterDelegate
而不是 Made.Of
来处理已经创建的 运行-time 委托:
var c = new Container();
Func<int> lazyInt = () => 42;
c.RegisterDelegate(_ => lazyInt());
var shouldBe42 = c.Resolve<int>();
当您可以提供 expression 方法调用或 属性 服务创建访问时,Made.Of
更好。它使 DryIoc 能够解析提供的表达式以进行诊断,并将其直接放入生成的工厂委托中。由于您已经有一个委托对象,因此 Made.Of
对您没有任何好处。
我正在尝试将对象解析为 Func<>
的结果。
但是我不知道该怎么做。
例如,这里我有一个变量(函数参数)lazyInt
(这可能是某种长 运行 计算的结果)并且在可能的稍后之前不需要该结果用法。
private Demo(Container c, Func<int> lazyInt) : base(c)
{
_container = c;
c.Register<int>(made: Made.Of(/*???*/));
}
我尝试了一些使用ServiceInfo.Of
等,但暂时没有成功。
怎么做到的?
您需要使用 RegisterDelegate
而不是 Made.Of
来处理已经创建的 运行-time 委托:
var c = new Container();
Func<int> lazyInt = () => 42;
c.RegisterDelegate(_ => lazyInt());
var shouldBe42 = c.Resolve<int>();
当您可以提供 expression 方法调用或 属性 服务创建访问时,Made.Of
更好。它使 DryIoc 能够解析提供的表达式以进行诊断,并将其直接放入生成的工厂委托中。由于您已经有一个委托对象,因此 Made.Of
对您没有任何好处。