我想知道 Simple Injector 是否有一个选项可以在 GetInstance(Of TService)
返回 Nothing
时停止抛出异常?它现在似乎正在抛出它们,因为我有两个获取实例的请求,但它不存在,并且抛出异常。
是否有办法阻止默认行为、某处设置或其他方式?
最佳答案
绝对有一种简单的方法可以做到这一点。 SimpleInjector.Container
实现了 System.IServiceProvider ,它定义了一个 object GetService(Type)方法。当类型未注册时,此方法返回 null
。然而,IServiceProvider
是显式实现的,这意味着它不会在正常使用下显示,因此您必须将 Container
转换为 IServiceProvider
,如下图:
IServiceProvider provider = container;
object instance = provider.GetService(typeof(MyClass));
或者你可以在此基础上定义一个扩展方法:
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;
}
我必须承认这个功能有点隐蔽。唯一的地方this method目前解释在引用库中。
请注意,通常注册 Null Object Pattern 会好得多实现(没有任何行为的空实现)而不是调用 TryGetInstance
方法。注入(inject)空对象使应用程序不必担心空引用,这使您的应用程序代码更易于理解和测试。
关于c# - 防止简单注入(inject)器在解析未注册服务时抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10076206/