0

オブジェクトを作成する必要がある順序は次のとおりです。SMですべてを初期化し、最後の1つだけをターゲットとして使用したいと思います。

var firstObject = new FirstClass("First", "Last");
var servers = new List<FirstClass> { firstObject };
var secondObject = new SecondClass();
secondObject.Servers = servers;
var thirdObject = new ThirdClass(secondObject);
var fourthObject = thirdObject.SomeGetFunction(thirdObject);

これがすべてSMで構成された後、基本的にのみ使用したい

var objectToUse = ObjectFactory.GetInstance<fourthObject>();

これまでのところ、私はそこまで半分しか到達できませんが、この構成全体がどれほど完全であるかを理解することはできません。最初の3つのオブジェクトはシングルトンであり、4番目のオブジェクトを適切にインスタンス化して構成するためにのみ必要です。

4

1 に答える 1

0

これを実現する方法を次に示します。これがベストプラクティスに従っているかどうかはわかりませんが、仕事は完了します。

最初に作成するオブジェクトには、構成ファイルからの設定が必要です。これは簡単でした。

For<FirstClass>()
     .Singleton()
     .Use<FirstClass>()
     .Ctor<string>("First").EqualToAppSetting("FirstKey")
     .Ctor<string>("Last").EqualToAppSetting("LastKey");

2 つ目は、作成後に 2 つのプロパティを設定する必要があり、そのうちの 1 つが typeIEnumerable<FirstClass>であり、設定方法がわからなかったため、より問題がありました。結局のところ、SM の「コンテキスト」オブジェクトと傍受が答えでした。

For<SecondClass>()
     .Singleton()
     .Use<SecondClass>()
     .OnCreationForAll((context,x) => 
                           {
                               var server = new FirstClass[1];
                               server[0] = context.GetInstance<FirstClass>();
                               x.Servers = server;
                               x.Connections = 1;
                           });

3 つ目も簡単で、SM に依存関係を理解させることができます。

For<ThirdClass>().Singleton().Use<ThirdClass>();

そして、最後の 4 番目のオブジェクトは、ThirdClass の呼び出しによって作成されるはずだったので、やはり注意が必要でした。ここでも、'context' のビルドが役立つことがわかりました。

For<FourthClass>()
      .Singleton()
      .Use(context => context.GetInstance<ThirdClass>().SomeGetFunction("stringParam"));

今私がしなければならないのはObjectFactory.GetInstance<FourthClass>、そこから呼び出して操作を行うことだけです。

于 2012-07-10T22:58:28.303 に答える