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然而,明确实施,这意味着它不正常使用情况下出现,所以你要投的Container到IServiceProvider,如下图所示:
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对象可以防止应用程序担心空引用,这使您的应用程序代码更容易理解,更容易测试.