Dependency injection 如何使用NServiceBus saga执行构造函数注入?

Dependency injection 如何使用NServiceBus saga执行构造函数注入?,dependency-injection,nservicebus,ioc-container,saga,Dependency Injection,Nservicebus,Ioc Container,Saga,如果我有一个我想在一个传奇中使用的类HelperClass,我希望能够将IHelperClass注入构造函数 我遇到的问题是,sagas似乎是用一个空构造函数实例化的;因此,虽然我可以创建一个接受IHelperClass的构造函数并在单元测试中使用它,但框架将始终调用无参数构造函数 我想我可以使用属性注入,但是由于这个helper类是“必要的”,我的理解是属性注入(假设它可以工作)不是最佳实践 那么,在不依赖具体的HelperClass实现的情况下,如何做到这一点呢?您不必担心saga上下文中帮

如果我有一个我想在一个传奇中使用的类HelperClass,我希望能够将IHelperClass注入构造函数

我遇到的问题是,sagas似乎是用一个空构造函数实例化的;因此,虽然我可以创建一个接受IHelperClass的构造函数并在单元测试中使用它,但框架将始终调用无参数构造函数

我想我可以使用属性注入,但是由于这个helper类是“必要的”,我的理解是属性注入(假设它可以工作)不是最佳实践


那么,在不依赖具体的HelperClass实现的情况下,如何做到这一点呢?

您不必担心saga上下文中帮助对象的“必要性”,因为没有其他代码会直接实例化saga


简而言之,您可以在这里使用属性注入而不必担心。

不确定这是否有帮助,但现在开始。我在Java中所做的(使用运行时字节码操作)是重命名no-arg构造函数,并将其方法签名更改为包含一个额外的参数(您的IHelperClass),然后注入一些代码来使用它。然后,我添加一个新的无参数构造函数作为重命名构造函数的代理,并使用工厂注入代码以获取“IHelperClass”的实例。这样,不知道额外参数的代码仍然可以正常工作。像这样的东西可行吗?我仍然在加速使用除穷人的DI之外的其他东西,所以我可能遗漏了一些东西,但这听起来似乎是可能的。我想唯一的一件事是,我必须让我试图注入的类依赖于我的IoC容器。我想我这样做是错误的——对不起。您是实现
Saga
构造函数的人,对吗?那么就不需要运行时字节码操作了。在DI中,helper类的“必要性”由对组件的依赖性表示,它是一个带注释的字段,而不是构造函数参数(需要非空检查!)。属性注入与构造函数参数的思想完全相同。除了您没有在代码中显式地指定它们的值,而是让DI引擎为您做这件事——可以说是反转控制:IoC。谢谢,Udi!对我来说,还有一个问题是,使用属性注入不需要我在单元测试期间指定接口的实现吗?我的假设是,如果我不这样做,测试将失败,因为该属性将为空。还是有什么方法可以利用我的IoC容器来实现这一点?