我有两个项目。 ProjectA有一个名为Task的类,projectB有一个名为Transmission的类。我希望每当传输发生变化时 - 任务会发生在任务和每当任务发生变化时 - 传输中会发生一些事情。项目之间的交互
为此,我创建了另一个名为Common的项目,ProjectA和ProjectB都将引用该项目。通常我把所有接口在两个实体之间进行交互。
在通用项目中,我创建了ProjectA将实现的名为IManager的接口。管理器的角色是处理更新。界面看起来像这样:
public interface IManager
{
ITaskChangedHandler TaskChangedHandler { set; }
void OnTransmissionChanged(ITransmissionWithTasks transmission);
}
这个接口有2种方法项目A必须实现:
void OnTransmissionChanged(ITransmissionWithTasks transmission);
当在传输(内部项目B)的变化调用此方法,以更新任务。ITaskChangedHandler TaskChangedHandler { set; }
IManager实现必须具有setas到ITaskChangedHandler。 ITaskChangedHandler是规定任务的情况下,用于更新传输的方法的接口改变:public interface ITaskChangedHandler { void OnTaskChanged(string moduleName, ITask task, long transmissionId); }
现在,它是这样的:
项目A具有执行到iManager。
每当有一个传输的cahnge我用StructureMap接受iManager中执行的实例,然后调用
OnTransmissionChanged();
这是我的问题 - 每当有在任务(在项目A)的变化,我想调用IManager实现的
TaskChangedHandler.OnTaskChanged()
。但问题是IManager实现的实例没有设置TaskChangedHandler。
我也不知道我应该在哪里设置这个TaskChangedHandler:这不可能是在项目A,因为它不知道ITaskChangedHandler的实施。
这不能在ProjectB中,因为创建IManager实现发生在ProjectA中,因此该集必须位于projectA中。
这不能在Common项目中,因为它不知道IManager和ITaskChangedHandler的实现。
任何人可以帮助我解决这个问题?
你认为什么更好 - 使用静态(或非静态)中介或者两种方式都使用依赖注入? – Naor
经过第二次考虑 - 此中介必须是静态的。每个项目都应该注册这些事件,如果它不是静态的,将不会有实例注册。我对吗? – Naor
如果你通过依赖注入来使用单例,那么没有必要是静态的,你可以'Get'(例如)并返回相同的实例。在我看来,静态是相当丑陋的。调解员必须在使用它之前注册自己。也就是说,您不需要使用DI的中介,因为任务可以将自己注册为ITask实现,将传输视为IT传输,并且都可以使用DI访问彼此。 –