这是我的代码。我是仿制药的新手,所以只是想知道是否有更好的方法来做我做过的事情。
public interface IMessageHandler<T> where T : IMessage
{
void Handle(T message);
}
public class MessageANotificationHandler : IMessageHandler<MessageA>
{
public void Handle(MessageA message)
{
// do something;
}
}
现在我希望我的应用程序接收所有实现IMessage的消息,但是自动计算出用于特定消息的处理程序。我已经完成了以下工作,但感觉还有更好的方法
public class MessageHandlerFactory
{
public Type GetMessageHandlerType(IMessage message)
{
if (message.GetType() == typeof(MessageA))
return typeof(MessageANotificationHandler);
return null;
}
}
然后在我的应用程序中,我使用反射来创建工厂返回的类型的实例并调用Handle方法。
如果您知道如何更好地使用此代码,请提供帮助。
由于
答案 0 :(得分:2)
我会删除工厂和IMessageHandler
界面......不需要它们。
我会将Handle
方法添加到IMessage
接口,而不是这样:
public void HandleMessageFor(IMessage msg) {
Type t = new MessageHandlerFactory().GetMessageHandlerType(msg);
// Activator.CreateInstance.. etc etc..
}
你可以简单地拥有..
public void HandleMessageFor(IMessage msg) {
msg.Handle();
}
答案 1 :(得分:0)
您可以将IMessage
改为抽象基类,并使用方法:
public abstract class MessageBase {
public abstract IMessageHandler GetHandler();
}
这需要IMessageHandler
为非通用的。