简单的注射器IsRegistered方法?

时间:2014-02-27 19:24:02

标签: c# dependency-injection ioc-container simple-injector

我正在尝试将Simple Injector集成到我们的应用程序中,我需要找到一种方法来实现IsRegistered方法,以查看是否在容器中注册了类型。我该如何实现呢?

1 个答案:

答案 0 :(得分:3)

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;
}