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

我想知道,只要GetInstance(Of TService)返回Nothing Simple Injector是否可以选择停止抛出exception? 它现在似乎是抛出它们,因为我有两个请求来获取一个实例,它不在那里,它抛出了exception。

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

绝对有一种简单的方法可以做到这一点。 SimpleInjector.Container实现System.IServiceProvider ,它定义了一个对象GetService(Type)方法。 未注册类型时,此方法返回null 。 但是, IServiceProvider是显式实现的,这意味着它不会在正常使用情况下显示,因此您必须将ContainerIServiceProvider ,如下所示:

 IServiceProvider provider = container; object instance = provider.GetService(typeof(MyClass)); 

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

 public static bool TryGetInstance( this Container container, out TService instance) where TService : class { IServiceProvider provider = container; instance = (TService)provider.GetService(typeof(TService)); return instance != null; } 

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

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