【发布时间】:2017-02-06 13:27:49
【问题描述】:
总的来说,我是 Ninject 和 DI 的新手。
假设我有一个班级Caller:
public class Caller : ICaller, ICallback {
private ICommand command;
public Caller(ICommand command) {
this.command = command;
}
//callback method
public void OnCommandCompleted() { }
}
Command 看起来像这样:
public class Command : ICommand {
private ICallback Callback { get; set; }
public Command(ICallback callback) {
this.Callback = callback;
}
public void Execute() {
//do something
this.Callback.OnCommandCompleted();
}
}
该命令应该具有对创建/注入它的类的引用。什么是合适的做法?当然,我可以从构造函数中删除依赖项,而是手动设置它:
public Caller(ICommand command) {
command.Callback = this;
this.command = command;
}
但是还有其他方法吗?
编辑:为了阐明我对这个设计的意图,我更新了给定的代码。 command 获得一个回调作为依赖项,在我的例子中是 Caller。
【问题讨论】:
-
为什么需要这个?这会导致循环依赖,这通常是一个坏主意,因为它们会增加复杂性。请更新您的答案,详细说明您为什么需要它并向您显示相关代码。通过这种方式,我们可以就如何修复您的设计向您提供反馈。
-
嘿,实际上
Command需要一个ICallback作为依赖项,以便在调用完成时通知调用者。我更新了我的示例代码以澄清这一点。
标签: dependency-injection ninject constructor-injection