Nao*_*aor 5 .net c# design-patterns
我有两个项目.ProjectA有一个名为Task的类,projectB有一个名为Transmission的类.我希望每当Transmission发生变化时 - 在Task中会发生一些事情,每当Task发生变化时 - 在Transmission中都会发生一些事情.
为此,我创建了另一个名为Common的项目,ProjectA和projectB都将参考该项目.通常我把所有接口都放在两个实体之间进行交互.
在Common项目中,我创建了一个名为IManager的接口,ProjectA将实现该接口.Manager的作用是处理更新.界面如下所示:
public interface IManager
{
ITaskChangedHandler TaskChangedHandler { set; }
void OnTransmissionChanged(ITransmissionWithTasks transmission);
}
Run Code Online (Sandbox Code Playgroud)
该接口有ProjectA必须实现的两种方法:
void OnTransmissionChanged(ITransmissionWithTasks transmission);
当传输发生变化时(在ProjectB内),调用此方法以便在任务中进行更新.
ITaskChangedHandler TaskChangedHandler { set; }
IManager实现必须具有ITaskChangedHandler的设置器.ITaskChangedHandler是一个接口,它定义了更改任务时更新传输的方法:
public interface ITaskChangedHandler
{
void OnTaskChanged(string moduleName, ITask task, long transmissionId);
}
Run Code Online (Sandbox Code Playgroud)现在,它是这样的:
ProjectA已实现IManager.
每当传输中出现cahnge时,我都会使用StructureMap接收IManager实现的实例,然后调用 OnTransmissionChanged();
这是我的问题 - 每当Task(在ProjectA中)发生变化时,我都想调用IManager实现TaskChangedHandler.OnTaskChanged().但问题是IManager实现的实例没有设置TaskChangedHandler.
我也不知道我应该在哪里设置这个TaskChangedHandler:
这不能在ProjectA中,因为它不知道ITaskChangedHandler的实现.
这不能在ProjectB中,因为IManager实现的创建发生在ProjectA中,因此该集必须在projectA中.
这不能在Common项目中,因为它不知道IManager和ITaskChangedHandler的实现.
有人可以帮我解决这个问题吗?
这是一个快速而肮脏的方法,可能会让您思考:一个静态的共享类,您可以在共享程序集中定义。
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();
}
}
Run Code Online (Sandbox Code Playgroud)
一个注册处理FirstEvent,另一个注册处理SecondEvent:互相调用,调用OnFirstEvent()或OnSecondEvent()相应。
这是中介者模式的一个简单但相当糟糕的实现:
http://en.wikipedia.org/wiki/Mediator_pattern
通过依赖注入,您也可以获取基于共享接口的对象的实例。例如,使用 Ninject,您可以将处理程序注册为IFirst常量(实现的特定实例IFirst),反之亦然。然后打电话Get<IFirst>去抢。
| 归档时间: |
|
| 查看次数: |
302 次 |
| 最近记录: |