5

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

有没有办法阻止默认行为、某处的设置或其他什么?

4

1 回答 1

15

绝对有一种简单的方法可以做到这一点。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 引用,这使您的应用程序代码更易于理解和测试。

于 2012-04-09T16:43:04.917 回答