1

Unity IoCは、タイプを解決するときに、デフォルトでオブジェクトの新しいインスタンスを作成しているようです。しかし、私の質問は、どういうわけか明示的にして、オブジェクトタイプを解決して、そのタイプの新しいインスタンスを取得するようにコンテナに指示することです。

IE明示的にして、type:MyNewObject(またはそれに関するすべてのタイプ)を解決するたびに、インスタンスが新しいインスタンスであることをコンテナに強制させたい

MyNewObject theInstance = container.Resolve<MyNewObject>();
4

2 に答える 2

2

はい、 TransientLifetimeManagerで簡単に設定できます

あなたがクラスを登録するとき、次のようなものが必要です

container.Register<IMyNewObject, MyMewObject>(new TransientLifetimeManager());
//or
container.Register<MyMewObject>(new TransientLifetimeManager())
于 2012-08-19T17:53:09.300 に答える
0

IoCの原則を適切に適用している場合、クラスはその依存関係を宣言し、コンテナーがそれらのライフサイクルを処理します。たとえば、HttpRequestオブジェクトと、現在のスレッドローカルオブジェクトなどを提供するコンテナハンドルを取得するとします。

コードは、依存関係のライフサイクルを実際に気にする必要はありません。依存関係や何を持っているかをクリアする責任を負わないためです(これらはすべて、依存関係自体にカプセル化され、によって呼び出されます。シャットダウン時のコンテナ)。

ただし、コードで同じタイプのシングルトンインスタンスを取得するか、注入されたインスタンスごとに取得するかを気にする必要がある場合は、JavaのGuiceコンテナと同様に、型システム自体を使用して明示的に説明したいと思います。そのProviderパターンで行います。これを行うために使用するGuiceスタイルのIProvider<T>インターフェイスを作成し、次のように単純な静的ファクトリメソッドを使用して接続します。

Provider.Of<Foo>(() => { /* Code to return a Foo goes here */})
于 2012-08-19T18:00:04.507 に答える