GetInstance(Of TService)
がNothing
を返すと、Simple Injectorに例外スローを停止するオプションがあるのだろうか?インスタンスを取得する要求が2つあり、そこには存在せず、例外がスローされているため、現在はスローされているようです。登録されていないサービスを解決する際にシンプルインジェクタが例外をスローするのを防ぐ
デフォルトの動作、設定の変更などを防ぐ方法はありますか?
GetInstance(Of TService)
がNothing
を返すと、Simple Injectorに例外スローを停止するオプションがあるのだろうか?インスタンスを取得する要求が2つあり、そこには存在せず、例外がスローされているため、現在はスローされているようです。登録されていないサービスを解決する際にシンプルインジェクタが例外をスローするのを防ぐ
デフォルトの動作、設定の変更などを防ぐ方法はありますか?
これを行う簡単な方法は絶対ありません。 SimpleInjector.Container
はSystem.IServiceProviderを実装しており、これはobject GetService(Type)メソッドを定義しています。型が登録されていない場合、このメソッドはnull
を返します。 IServiceProvider
は、しかし、それは通常の使用の下に表示されないことを意味する、明示的に実装されているので、あなたは、以下に示すように、IServiceProvider
にContainer
をキャストする必要があります。
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;
}
この機能は少し隠されています。唯一の場所this methodは現在参照ライブラリに記載されています。
は、一般的に、代わりにTryGetInstance
メソッドを呼び出すNull Object Pattern実装(任意の行動のない空の実装)を登録するためにはるかに優れていることに注意してください。ヌルオブジェクトを挿入すると、アプリケーションがヌル参照を心配する必要がなくなるため、アプリケーションコードの理解が容易になり、テストが容易になります。
「Nothing」を返すことは有効ですか? 'null'を返すのではなく、[Null Object](http://en.wikipedia.org/wiki/Null_Object_pattern)を返すほうがよい場合がよくあります。これにより、アプリケーション内からコンテナを呼び出す必要がなくなります。 – Steven
はい、このシナリオでは、フォローアップステートメントが別のソースからチェックして読み込むため、Nothingが返されることをお勧めします。これは第三者ツールセット内で定義されているため、私はその条件付きロジックを制御できません。 –