防止Simple Injector在解析未注册的服务时抛出exception
我想知道,只要GetInstance(Of TService)
返回Nothing
Simple Injector是否可以选择停止抛出exception? 它现在似乎是抛出它们,因为我有两个请求来获取一个实例,它不在那里,它抛出了exception。
有没有办法防止默认行为,设置某个地方,或其他什么?
绝对有一种简单的方法可以做到这一点。 SimpleInjector.Container
实现System.IServiceProvider ,它定义了一个对象GetService(Type)方法。 未注册类型时,此方法返回null
。 但是, IServiceProvider
是显式实现的,这意味着它不会在正常使用情况下显示,因此您必须将Container
为IServiceProvider
,如下所示:
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对象可以防止应用程序担心空引用,这使您的应用程序代码更容易理解,更容易测试。