实现两个接口

时间:2016-01-29 18:40:31

标签: c# generics interface delegates type-constraints

我试图创建一个简单的内存总线实现,其中构造函数可以将管道作为参数,即

public Bus(Action<IMessage, Action<IMessage>> eventPipeline)
{
    _eventPipeline = eventPipeline;
}

其中IMessage是一个空接口(用于IEventICommand的公共接口)。

然后我有一个装饰器,我想成为管道的一部分(即每次我们在调用特定事件的事件处理程序被调用之前将事件发布到总线上时应该调用它):

public class HttpAuditDecorator<T> : IDecorator<T> where T : IAuditable, IMessage
{
    private ILogger _logger = Logging.Logger;

    public void Handle(T msg, Action<IMessage> next)
    {
        ...
        next(msg);
    }
}

此处IAuditable是另一个与IMessage无关的界面。 IDecorator

public interface IDecorator<T> where T : IMessage
{
    void Handle(T msg, Action<IMessage> next);
}

尝试实例化总线时出现问题:

public static Bus Bootstrap()
{
    Instance = new Bus((@event, next) => new HttpAuditDecorator<T>().Handle((IAuditable)@event, next));
    ...
}

问题是在T的地方写什么。我想以某种方式告诉T实施IAuditableIMessage。当然,可以创建一个继承自两者的新界面,但我更希望避免这种情况。

0 个答案:

没有答案