service-locator相关内容

如何将可设计组件与依赖注入相结合

创建可设计的 .NET 组件时,您需要提供默认构造函数.来自 IComponent 文档: 要成为组件,类必须实现 IComponent 接口和提供一个基本的构造函数不需要参数或单个IContainer 类型的参数. 这使得通过构造函数参数进行依赖注入成为不可能.(可以提供额外的构造函数,但设计者会忽略它们.)我们正在考虑的一些替代方案: 服务定位器 不要使用依赖注入,而是 ..
发布时间:2022-01-21 10:56:46 C#/.NET

从静态工厂类访问 ASP.NET Core DI 容器

我根据 James Still 的博客文章 使用 RabbitMQ 的真实 PubSub 消息传递. 在他的文章中,他使用一个静态类来启动队列订阅者并为队列中的事件定义事件处理程序.然后,此静态方法通过静态工厂类实例化事件处理程序类. 使用 RabbitMQ.Client;使用 RabbitMQ.Client.Events;使用系统;使用 System.Text;命名空间 NST.Web. ..

依赖注入 - 与数据传输对象 (DTO) 一起使用?

考虑下面的代码(已简化).我有一个服务类,它返回一个特定 DTO 对象的列表,每个对象都实现了自己的特定接口.在实际代码中,当我使用遗留代码时,这些是通过遍历数据集来填充的. 问题: 我们如何在不更新 DTO 或使用服务定位器反模式的情况下创建/使用 DTO?在 Composition Root 中组合一个空的 DTO 对象并通过构造函数将其注入 Service 类并没有多大意义,因为 ..

使用 servicelocation 而不是构造函数注入来避免编写工厂类的负载是否不好

现在我们使用 DI/IOC,当我们需要将额外的参数传递给构造函数时,我们使用工厂类,例如 公共类EmailSender{内部 EmailSender(字符串 toEmail,字符串主题,字符串正文,ILogger emailLogger){.....}}公共类 EmailSenderFactory{ILogger emailLogger;公共 EmailSenderFactory(ILogger ..

IDependencyResolver 是反模式吗?

我正在为旧的 ASP.NET 应用程序设计一些架构更改.我设计了一些用于依赖解析的类的原型,这些类模仿了 ASP.NET MVC 的 IDependencyResolver.我不会发布,因为它的界面几乎相同,但使用其他自然语言. 我发现它可能被认为是服务位置,反过来通常(在某些情况下不完全)谴责它以支持依赖注入.尽管如此,我找不到任何反对使用 ASP.NET MVC 的依赖解析实现的建议. ..
发布时间:2021-12-26 10:29:36 C#/.NET

依赖注入与服务位置

我目前正在权衡 DI 和 SL 之间的优缺点.但是,我发现自己陷入了下面的第 22 条陷阱,这意味着我应该对所有事情都使用 SL,并且只将 IoC 容器注入每个类. DI Catch 22: 某些依赖项,例如 Log4Net,根本不适合 DI.我称这些为元依赖,并认为它们对调用代码应该是不透明的.我的理由是,如果一个简单的类 'D' 最初是在没有日志记录的情况下实现的,然后增长到需要日 ..

ServiceLocator 是一种反模式吗?

最近我阅读了Mark Seemann 的关于服务的文章定位器反模式. 作者指出了 ServiceLocator 是反模式的两个主要原因: API 使用问题(我完全没问题) 当类使用服务定位器时,很难看到它的依赖关系,因为在大多数情况下,类只有一个无参数构造函数.与 ServiceLocator 相比,DI 方法通过构造函数的参数显式公开依赖项,因此在 IntelliSense 中很容 ..

根据请求参数在运行时创建 EF Core DbContext

背景 我们正在使用 ASP.Net Core 和 Entity Framework Core 2.2 构建 Web 应用程序 我们正在连接到旧数据库.设置是有 16 个数据库,所有数据库都具有完全相同的模式,保存不同的上下文数据.我们无法改变这一点. 我们需要在运行时根据请求参数连接到特定数据库. 想象一下,母公司下的每家企业都有一个数据库. 想象一下,每个数据库都有 ..
发布时间:2021-11-24 16:00:42 C#/.NET

根据请求参数在运行时创建 EF Core DbContext

背景 我们正在使用 ASP.Net Core 和 Entity Framework Core 2.2 构建 Web 应用程序 我们正在连接到旧数据库.设置是有 16 个数据库,所有数据库都具有完全相同的模式,保存不同的上下文数据.我们无法改变这一点. 我们需要在运行时根据请求参数连接到特定数据库. 想象一下,母公司下的每个企业都有一个数据库. 想象一下,每个数据库都有 ..
发布时间:2021-10-26 15:58:32 C#/.NET

在 Zend Framework 2 中访问全局配置

我想访问位于我的个人库(在 vendor 目录).但是尽管我在网上搜索,我还是没有成功. 我知道如何访问模块的配置文件: \MyModule\Module::getConfig() 我知道如何从控制器访问全局配置: $this->getServiceLocator()->get('config'); 但是如何从供应商目录中的文件访问这些?我的图书馆没有扩展任何东西,这可能是问题的根源 ..
发布时间:2021-10-05 18:55:33 PHP

在以下示例中,为什么服务定位器是反模式?

我有一个MVC应用程序,该应用程序具有定义良好的域模型,实体,存储库和服务层. 为了避免在控制器内部实例化我的服务类,从而使控制器陷入不适合它们的逻辑的困扰,我创建了一个帮助器,其作用类似于 我看到的基本上是带有依赖项的工厂类( App \ Controller \ Action \ Helper \ Service ),这些依赖项是通过ctor注入的.因此,您的类不知道其依赖项来自何处, ..

提供程序与Get_it

在搜索Flutter的依赖注入解决方案时,我发现了两个很棒的库: provider 和 get_it . 据我所知, provider 具有更多样板,但它非常适合Flutter,允许 Consumer 重建 Widget的一部分树,一旦注入值更改. 另一方面, get_it 更直接,更易于使用并且不依赖Flutter,因此可以与任何Dart代码一起使用. 它们之间是否还有其他区别和 ..

如何静态检查可变参数模板参数列表中是否存在类型T

我试图静态检查可变参数模板参数列表中是否存在类型.但是,此模板列表实际上存在于传递单一类型的类中.答案此处显示了如何检查参数列表或参数包,但是我不确定如何测试包含可变参数模板的类. 例如 模板服务类{};模板类ServiceLocator{上市:模板夯;解决(){static_assert(check_t ..