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