我有两个项目。 ProjectA有一个名为Task的类,而ProjectB有一个名为Transmission的类。我希望每当传输发生更改时-Task中将发生某些事情,而每当Task发生更改时-传输中都会发生一些事情。
为此,我创建了另一个名为Common的项目,ProjectA和projectB都将引用该项目。通常,我将所有接口(interface)都放在两个实体之间进行交互。
在Common项目中,我创建了一个名为IManager的接口(interface),ProjectA将实现该接口(interface)。 Manager的作用是处理更新。界面如下所示:
public interface IManager
{
ITaskChangedHandler TaskChangedHandler { set; }
void OnTransmissionChanged(ITransmissionWithTasks transmission);
}
此接口(interface)有2种方法ProjectA必须实现:
void OnTransmissionChanged(ITransmissionWithTasks transmission);
当传输发生变化时(在ProjectB内部),将调用此方法以更新任务。 ITaskChangedHandler TaskChangedHandler { set; }
IManager实现必须具有ITaskChangedHandler的 setter 。 ITaskChangedHandler是一个接口(interface),该接口(interface)定义了在任务更改的情况下用于更新传输的方法:public interface ITaskChangedHandler
{
void OnTaskChanged(string moduleName, ITask task, long transmissionId);
}
现在,它是这样的:
OnTransmissionChanged();
TaskChangedHandler.OnTaskChanged()
。但是问题是IManager实现的实例未设置TaskChangedHandler。我也不知道该在哪里设置TaskChangedHandler:
有人可以帮我解决这个问题吗?
最佳答案
这是一种让您思考的快捷方法:可以在共享程序集中定义的静态共享类。
public static class SharedEvents
{
public delegate void FirstEventHandler();
public delegate void SecondEventHandler();
public static event FirstEventHandler FirstEvent;
public static event FirstEventHandler SecondEvent;
public static void OnFirstEvent()
{
if (FirstEvent != null) FirstEvent();
}
public static void OnSecondEvent()
{
if (!SecondEvent != null) SecondEvent();
}
}
一个注册处理
FirstEvent
,另一个注册处理SecondEvent
:互相调用,相应地调用OnFirstEvent()
或OnSecondEvent()
。这是Mediator模式的简单但效果很差的实现:
http://en.wikipedia.org/wiki/Mediator_pattern
使用依赖注入(inject),您也可以基于共享接口(interface)将对象实例化。例如,使用Ninject,您可以将
IFirst
的处理程序注册为常量(实现IFirst
的特定实例),反之亦然。然后调用Get<IFirst>
进行抓取。关于c# - 项目之间的互动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6996107/