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 对您没有任何好处。