2014-02-27 63 views
2

我想将简单的注入器集成到我们的应用程序中,我需要找到一种方法来实现一个IsRegistered方法来查看是否在容器中注册了一个类型。我怎样才能实现这个?SimpleInjector IsRegistered方法?

回答

1

类似IsRegistered的方法在Simple Injector中没有实现,因为你不需要它。这种方法会导致Service Locator anti-pattern,应该不惜一切代价避免。

不必查询某个类型的存在,即使没有任何东西需要实现,也要确保始终注册一个实现。注册一个空实现(执行Null Object Pattern,不要与null reference混淆)。注入一个Null对象使消耗代码更容易,并且使测试变得更容易,因为依赖关系只是必需的,您将失去空检查并调用IsRegistered

但是在某些情况下,您可能会在您的Composition Root(取决于并调用容器的位置)进行某些检查。即使在这些情况下,使用IsRegistered将是非常罕见的(我从来没有看到它的实际用途),尽管有cases查询容器的注册是非常有用的。

public static bool IsRegistered(this Container container, Type serviceType) 
{ 
    return container.GetRegistration(serviceType) != null; 
} 

尽管如此,该方法可以很容易地通过请求一个登记实现

相关问题