GetInstance(Of TService)
我想知道 Simple Injector 是否可以选择在返回时停止抛出异常Nothing
?它现在似乎正在抛出它们,因为我有两个请求来获取一个实例,它不存在,并且它抛出了异常。
有没有办法阻止默认行为、某处的设置或其他什么?
GetInstance(Of TService)
我想知道 Simple Injector 是否可以选择在返回时停止抛出异常Nothing
?它现在似乎正在抛出它们,因为我有两个请求来获取一个实例,它不存在,并且它抛出了异常。
有没有办法阻止默认行为、某处的设置或其他什么?
绝对有一种简单的方法可以做到这一点。SimpleInjector.Container
实现System.IServiceProvider ,它定义了一个对象GetService(Type)方法。此方法null
在未注册类型时返回。但是, 是显式实现的IServiceProvider
,这意味着它在正常使用下不会显示,因此您必须将 to 强制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;
}
我必须承认这个功能有点隐藏。目前唯一解释此方法的地方是参考库。
请注意,通常注册空对象模式实现(没有任何行为的空实现)比调用方法要好得多TryGetInstance
。注入 Null 对象使应用程序不必担心 null 引用,这使您的应用程序代码更易于理解和测试。