防止Simple Injector在解析未注册的服务时抛出异常

Bri*_*ins 4 .net c# dependency-injection ioc-container simple-injector

我想知道Simple Injector是否有选项可以在GetInstance(Of TService)返回时停止抛出异常Nothing?它似乎现在抛出它们,因为我有两个请求来获取一个实例,它不在那里,并且它抛出异常.

有没有办法防止默认行为,设置某个地方,或其他什么?

Ste*_*ven 14

绝对有一种简单的方法可以做到这一点.所述SimpleInjector.Container器具System.IServiceProvider,它定义一个对象GetService的(类型)的方法.null未注册类型时返回此方法.该IServiceProvider然而,明确实施,这意味着它不正常使用情况下出现,所以你要投的ContainerIServiceProvider,如下图所示:

IServiceProvider provider = container;
object instance = provider.GetService(typeof(MyClass));
Run Code Online (Sandbox Code Playgroud)

或者您可以在此基础上定义扩展方法:

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;
}
Run Code Online (Sandbox Code Playgroud)

我必须承认这个功能有点隐藏.目前解释此方法的唯一地方是参考库.

请注意,一般来说,注册Null对象模式实现(没有任何行为的空实现)而不是调用TryGetInstance方法要好得多.注入Null对象可以防止应用程序担心空引用,这使您的应用程序代码更容易理解,更容易测试.