5

GetInstance(Of TService)Simple Injector に、返されるたびに例外のスローを停止するオプションがあるかどうか疑問に思っていましたNothingか? インスタンスを取得するための2つのリクエストがあり、そこになく、例外がスローされるため、現在それらをスローしているようです。

デフォルトの動作、どこかの設定、または何か他のものを防ぐ方法はありますか?

4

1 に答える 1

15

これを行う簡単な方法は絶対にあります。オブジェクトのGetService(Type)メソッドを定義するSystem.IServiceProviderSimpleInjector.Containerを実装します。このメソッドは、型が登録されていない場合に戻ります。ただし、は明示的に実装されているため、通常の使用では表示されないため、以下に示すように toをキャストする必要があります。nullIServiceProviderContainerIServiceProvider

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 参照を気にする必要がなくなり、アプリケーション コードが理解しやすくなり、テストしやすくなります。

于 2012-04-09T16:43:04.917 に答える