0

構造マップでは、登録するオブジェクトのライフサイクルを制御できます。通常、次のように具象型へのインターフェイスがあります。

x.For<IMyInterface>().Transient().Use<MyObject>();

だから私はライフサイクルを制御することができます。ただし、登録されていないオブジェクト(Concrete)タイプを解決する場合、ライフサイクルはデフォルトでTransient()のように見えます。

確かに各具象型を登録したくないので、これは明らかに構造マップの便利な機能です。

ただし、登録せずにこのライフサイクルをオーバーライドする方法はありますか?

さらに、次のように、オブジェクトのライフサイクルをオーバーライドとして指定できると便利です。

ObjectFactory.With<SomeUnregisteredConcreteObject>().LifeCycleIs(...)

このような場合、ライフサイクルは次の解決のために変更されます。GetInstance

これをどのように行うことができるか考えていますか?

4

1 に答える 1

0

子コンテナを作成してコンポーネントを登録できます:

var child = ObjectFactory.Container.CreateChildContainer();
child.Configure(config => config.For<SomeUnregisteredConcreteType>().Singleton());
var @object = child.GetInstance<...>();

あなたが登録したくなかったのは、登録を長引かせたくなかったからだと思います。これでその問題は解決すると思います。

また、デフォルトのライフサイクルを指定する組み込みの方法についても知りません。ただし、インターフェイスを使用するとおそらく可能だと思いIAutoMockerます。おそらく、そのフォルダー全体のコードを参照して、その方法を理解することができます。AutoMocking はコンテナーにフックして、登録されていないコンポーネントが要求されるようにし、 を呼び出してIAutoMocker、コンポーネントを登録する機会を与えます。IAutoMockerコンポーネントを別のデフォルト ライフサイクルに登録するために使用できると思います。

これに成功した場合は、プル リクエストを送信するか、ブログ投稿を書いて、他のユーザーと共有してください。

于 2012-09-03T13:47:21.757 に答える