- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
假设您的代码通过任何依赖项的构造函数注入(inject)为 DI 和 IOC 正确设计。那么在组合根部是否使用 IOC 容器或 DI-by-hand 对于这个问题来说并不重要。我想。
无论如何,我一次又一次地发现自己在思考如何最好地处理基于范围的服务,比如事务或其他明显的 transient 操作。我想遵守以下约束:
IDisposable
- 这是一个有漏洞的抽象,只有实际的实现类型(以及位于组合根的 fiddler )应该关心。为了能够使用using
,我们需要IDisposable
,但由于依赖接口(interface)不应该是IDisposable
,你如何获得围绕它以获得作用域行为?
最佳答案
在这种情况下,我会注入(inject)一个服务工厂来创建这些范围内的服务,并让服务接口(interface)派生自 IDisposable
。这样,工厂将负责创建适当的服务实例,并且是决定返回哪个服务实现的唯一点。您不需要在任何地方注入(inject)作用域服务。
public interface ITransaction : IDisposable
{
}
public interface ITransactionFactory
{
ITransaction CreateTransaction();
}
public class Foo
{
private readonly ITransactionFactory transactionFactory;
public Foo(ITransactionFactory transactionFactory)
{
this.transactionFactory = transactionFactory;
}
public void DoSomethingWithinTransaction()
{
using(ITransaction transaction = this.transactionFactory.CreateTransaction())
{
DoSomething();
}
}
}
关于c# - 如何处理范围性质的服务,如 DI 和 IOC 环境中的事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5866983/
Eclipse 坚持在我的项目中启用 JSF 方面。我可以很容易地禁用它,但是当我通过 Eclipse 运行 Maven -> Update Project 时,facet(以及关联的 WEB-INF
我在 Linux 下从 eclipse 导出了一个 SWT 项目,并尝试在 Windows 下导入它。到目前为止,一切都工作正常,除了我似乎失去了该项目的“SWT 性质”。使用 SWT gui 运行项
我有以下项目结构: root-gradle (build.gradle) 项目组 1(无构建文件) project1 (build.gradle) project2 (build.gradle) ..
我正在K8s集群上试验Spark2.3。想知道检查点如何工作?它存储在哪里?如果主驱动程序死了,那么现有处理会怎样? 在从卡夫卡消费时,补偿如何保持?我试图在线查找,但找不到这些问题的任何答案。我们的
我有一个 springboot 项目,它被组织为多个模块。我正在使用 Eclipse 2019-06(版本 4.12)和 jdk 1.8 update 131 和 apache maven 3.3.9
我是一名优秀的程序员,十分优秀!