名前付きインスタンスを使用して同じインターフェイスに対して5つの派生クラスを登録しました。これらのすべてのクラスはシングルトン複数のインスタンスを返すシングルトンのStructuremap
For<IBaseInterface>().Singleton().Use<DerivedClass1>().Named("Derived1");
For<IBaseInterface>().Singleton().Use<DerivedClass2>().Named("Derived2");
For<IBaseInterface>().Singleton().Use<DerivedClass3>().Named("Derived3");
として登録されている入力に基づいてインスタンスを解決し、静的なクラスがあります。しかし、私は、ObjectFactory.GetInstanceを呼び出すたびに、シングルトンの代わりにすべてのリクエストで新しいインスタンスを返すことを確認しました。アプリケーションにスレッドはありません。
これはなぜ起こっているのですか?
編集:
静的解決ヘルパーが問題を引き起こしますか?これがインスタンスを解決する方法です。シングルトンはサンプルアプリケーションで正常に動作しますが、自分のマシンで動作しません。
さらに詳しい情報を追加するには - プロジェクトはMVC Web APIで、私はローカルIISでテストしています。私は、アプリケーションにユーザが作成したスレッドがないことを肯定的です。
public static class Resolver
{
public static IBaseInterface GetHelper(string inputParam)
{
if inputParam is "Case1"
return ObjectFactory.GetInstance<IBaseInterface>("Derived1")
//Similarly for other instances
}
}
結果を繰り返すことができません。あなたの登録を行い、 'GetInstance'と' GetNamedInstance'の両方で試しました。 'GetInstance'は毎回最後に登録されたインスタンスを返します。 'GetNamedInstance(" Derived1 ")'は毎回 'DerivedClass1'の同じインスタンスを返します。 – PHeiberg
はい、問題を再現する例を投稿してください。 – neontapir
こんにちはPHeibergとneontapir、私は簡単なコードサンプルを作成しようとし、それでうまく動作します。しかし、私のアプリケーションでは動作しません。私はインスタンスが呼び出されている方法についていくつかの詳細を追加しました。それを確認してください。ありがとうございます – ganeshran