2

我试图让对象作为Func<>. 但我不知道该怎么做。

例如,这里我有一个变量(函数参数)lazyInt(可能是某种长时间运行计算的结果),并且在以后可能使用之前不需要该结果。

        private Demo(Container c, Func<int> lazyInt) : base(c)
        {
            _container = c;
            c.Register<int>(made: Made.Of(/*???*/));
        }

我尝试了一些使用ServiceInfo.Of等,但暂时没有成功。如何做呢?

4

1 回答 1

3

您需要使用RegisterDelegate而不是Made.Of使用已创建的运行时委托:

var c = new Container();

Func<int> lazyInt = () => 42;
c.RegisterDelegate(_ => lazyInt());

var shouldBe42 = c.Resolve<int>();

Made.Of当您可以通过方法调用或属性访问来提供表达式以创建服务时,效果会更好。它使 DryIoc 能够解析提供的诊断表达式并将其直接放入生成的工厂委托中。由于您已经有一个委托对象,因此Made.Of对您没有任何好处。

于 2016-08-29T07:36:57.603 回答