16

Unityが失敗したResolutionFailedException場合にスローしないようにするにはどうすればよいResolveですか?

のようなものはありTryResolve<IMyInterface>ますか?

var container = new UnityContainer();
var foo = container.TryResolve<IFoo>();
Assert.IsNull(foo);
4

6 に答える 6

16

また、Unity 2.0を使用している場合は、新しいIsRegistered()メソッドを使用でき、これも汎用バージョンであることに注意してください。

于 2010-08-25T16:23:10.170 に答える
9

これはcodeplexサイトの問題であり、ここでコードを見つけることができます(そのスレッドの下部を見て、拡張メソッドを作成しました...非常に便利です)

http://unity.codeplex.com/Thread/View.aspx?ThreadId=24543

そして、あなたはこのようなコードを使うことができます:

if (container.CanResolve<T>() == true)
{
    try
    {
        return container.Resolve<T>();
    }
    catch (Exception e)
    {
        // do something else
    }
}

CanResolveその拡張メソッドです。私は実際にコンテナの作成時にその拡張機能を登録しています...次のようなものです:

private void CreateContainer()
{
    ExeConfigurationFileMap map = new ExeConfigurationFileMap();

    map.ExeConfigFilename = // path to config file

    // get section from config code goes here

    IUnityContainer container = new UnityContainer();
    container.AddNewExtension<UnityExtensionWithTypeTracking>();
    section.Containers.Default.Configure(container);        
}
于 2009-05-23T15:53:21.363 に答える
3

この機能が不足しているようです。この記事では、Resolveメソッドをtry/catchブロックで囲んで実装する例を示します。

public object TryResolve(Type type)
{
    object resolved;

    try
    {
        resolved = Resolve(type);
    }
    catch
    {
        resolved = null;
    }

    return resolved;
}
于 2009-05-18T18:14:21.240 に答える
2

これは、現在のリリースでは使用できません。ただし、C# 3 では拡張メソッドを使用していつでも「自分で作成」できます。Unity がこれをサポートすると、拡張メソッドを省略または更新できます。

public static class UnityExtensions
{
    public static T TryResolve<T>( this UnityContainer container )
        where T : class
    {
        try
        {
            return (T)container.Resolve( typeof( T ) );
        }
        catch( Exception )
        {
            return null;
        }
    }
}
于 2009-05-18T19:25:55.447 に答える
0

Prism Unity 5 では、名前空間Microsoft.Practices.Prism.UnityExtensionsに含まれているTryResolve関数を考え出しました。

このリンクhttps://msdn.microsoft.com/en-us/library/gg419013(v=pandp.50).aspxを参照してください。

于 2015-06-02T11:51:43.983 に答える