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 に答える