您可以遵循事件聚合器/调解器模式
我有一个基于插件的项目,但插件必须引用一个通用框架 dll 才能“可插入”。这是确保可以通过插件和 shell 应用程序实现通信组件的最佳方法之一。
在您的通用框架库中:
public class Mediator : IMediator // The interface would just specify the methods below
{
private List<object> _subscribers = new List<object>();
public void Subscribe(object subscriber)
{
_subscribers.Add(subscriber);
}
public void Unsubscribe(object subscriber)
{
_subscribers.Remove(subscriber);
}
public void Publish(object payload)
{
// Loop through all subscribers and see if they implement the interface
// and that the param types match the passed in payload type
// if so - call ReceiveMessage with the payload
}
}
订阅者将使用的接口
public interface ISubscribe<T>
{
void ReceiveMessage(T payload);
}
然后你只需要传递中介作为依赖
public class SomeViewModel, ISubscribe<SomeMessageType>
{
public SomeViewModel(IMediator mediator)
{
mediator.Subscribe(this);
}
public ReceiveMessage(SomeMessageType payload)
{
// Do stuff with payload
}
}
SomeMessageType
可以是任何类型
这样,您的 messager 是插件可以依赖的单独组件,但所有组件都知道如何相互通信,而无需了解 shell。
他们只是Publish
用他们想要发送的消息类型调用中介:
mediator.Publish(new MyMessageType("Hello"));