GetInstance(Of TService)
Simple Injector に、返されるたびに例外のスローを停止するオプションがあるかどうか疑問に思っていましたNothing
か? インスタンスを取得するための2つのリクエストがあり、そこになく、例外がスローされるため、現在それらをスローしているようです。
デフォルトの動作、どこかの設定、または何か他のものを防ぐ方法はありますか?
GetInstance(Of TService)
Simple Injector に、返されるたびに例外のスローを停止するオプションがあるかどうか疑問に思っていましたNothing
か? インスタンスを取得するための2つのリクエストがあり、そこになく、例外がスローされるため、現在それらをスローしているようです。
デフォルトの動作、どこかの設定、または何か他のものを防ぐ方法はありますか?
これを行う簡単な方法は絶対にあります。オブジェクトのGetService(Type)メソッドを定義するSystem.IServiceProviderSimpleInjector.Container
を実装します。このメソッドは、型が登録されていない場合に戻ります。ただし、は明示的に実装されているため、通常の使用では表示されないため、以下に示すように toをキャストする必要があります。null
IServiceProvider
Container
IServiceProvider
IServiceProvider provider = container;
object instance = provider.GetService(typeof(MyClass));
または、これに加えて拡張メソッドを定義できます。
public static bool TryGetInstance<TService>(
this Container container, out TService instance)
where TService : class
{
IServiceProvider provider = container;
instance = (TService)provider.GetService(typeof(TService));
return instance != null;
}
この機能は少し隠されていることを認めなければなりません。このメソッドが現在説明されている唯一の場所は、参照ライブラリです。
一般に、メソッドを呼び出すよりも、 Null オブジェクト パターンの実装 (動作のない空の実装)を登録する方がはるかに優れていることに注意してくださいTryGetInstance
。Null オブジェクトを挿入すると、アプリケーションが null 参照を気にする必要がなくなり、アプリケーション コードが理解しやすくなり、テストしやすくなります。