gpt4 book ai didi

c# - 简单的注入(inject)器 IsRegistered 方法?

转载 作者:行者123 更新时间:2023-11-30 22:08:45 27 4
gpt4 key购买 nike

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

最佳答案

IsRegistered 之类的方法在 Simple Injector 中明确未实现,因为您不需要它。这种方法会导致 Service Locator anti-pattern并且应该不惜一切代价避免。

不必查询类型是否存在,而是确保始终注册了一个实现,即使没有要实现的东西。注册一个空的实现( Null Object Pattern 的实现,不要与 null reference 混淆)。注入(inject) Null 对象使使用代码更容易,并使测试更容易,因为依赖性只是必需的,您将丢失空检查和对 IsRegistered 的调用。

但是在某些情况下,您可能会在 Composition Root 中进行某些检查(可以依赖和调用容器的地方)。即使在那些情况下,IsRegistered 的使用也将极为罕见(我从未见过它的真正用途),尽管有 cases查询容器的注册非常有用。

不过,该方法可以通过请求注册轻松实现:

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

关于c# - 简单的注入(inject)器 IsRegistered 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22078374/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com