2016-08-26 13 views
2

私はオブジェクトがFunc<>の結果として解決されるようにしようとしています。 しかし、私はそれを行う方法を見つけることはありません。DryIoc関数で解決する

たとえば、変数(関数の引数)lazyInt(これは、ある種の長時間実行された計算の結果である可能性があります)と、後で使用できるようになる前には結果は必要ありません。

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

私はServiceInfo.Ofなどを使用して少し試みましたが、当面は成功しませんでした。 どうすればできますか?

+1

あなたはcontainer.RegisterDelegate(_ => lazyInt()); – dadhi

+0

私はRegisterDelegateが別の方法があるときはいつも推奨されていないので、好ましい選択肢があるかもしれません。 –

+1

すでに作成済みのデリゲート(lazyInt)を既に持っている場合は、回避策はありません。デリゲートを式ツリーとして書くことができれば、Made.Ofが優れているので、ツリーを解析して分析することができます。 – dadhi

答えて

2

すでに作成され、実行時のデリゲートで動作するようにRegisterDelegateの代わりMade.Ofを使用する必要があります:あなたがサービスを作成するためのメソッド呼び出しまたはプロパティアクセスのexpressionを提供することができたときに

var c = new Container(); 

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

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

Made.Ofが良いです。これは、DryIocが診断のために提供された式を解析し、それを結果のファクトリデリゲートに直接入れることを可能にします。あなたは既にデリゲートオブジェクトを持っているので、Made.Ofはあなたのために何もしません。

関連する問題