8

Resolveを呼び出して例外をトラップせずに、タイプがUnityコンテナに登録されているかどうかをテストできますか?

4

2 に答える 2

13

Unity 2.0 にはIsRegistered、型がコンテナーに登録されているかどうかを確認するために使用できるメソッドがあります。

Unity 2.0 の Beta1 は、2 月 10 日から Codeplex で利用できます。リリース ノートを参照して、ここからダウンロードしてください。http://unity.codeplex.com/wikipage?title=Unity2%20Beta1

アップデート:

2010 年 2 月 27 日に Unity 2.0 ベータ 1 をダウンロードしてテストしましたが、まだ製品化の準備が整っています。現在 Unity 1.2 を使用している場合、不完全な (?) IUnityContainer インターフェイスのため、Unity 2.0 を機能させるためにいくつかの主要な作業を行う必要があります。したがって、現在 IsRegistered メソッドを機能させたい場合は、次のような拡張メソッドを作成できます。

public static class UnityContainerExtensions
{
    public static bool IsRegistered<T>(this IUnityContainer container)
    {
        try
        {
            container.Resolve<T>();
            return true;
        }
        catch
        {
            return false;
        }
    }
}

ここでは使用しないことに注意してResolveAllください。この理由はResolveAll、Unity ドキュメントに記載されているように、デフォルトの (名前のない) 登録を返さないためです。

このメソッドは、同じ Type で名前が異なる複数の型を登録した場合に便利です。

このメソッドは、デフォルト (名前なし) 登録のインスタンスを返さないことに注意してください。

于 2010-02-27T14:44:48.593 に答える
2

(現在)他の唯一のオプションはResolveAll<T>()、結果を使用して列挙することです。

于 2009-01-25T02:04:32.750 に答える