Extract generic type into interface

Viewed 69

I have two Interfaces

  public interface IEventBusExchange<in TQueue, TMessage> 
    where TQueue : struct
    where TMessage : DtoBase
  {
    Task PublishAsync(TMessage message);
    Task SubscribeAsync(TQueue queue, Func<TMessage, bool> callback);
  }
  public interface ISubscriber<TQueue, TMessage> : ISubscriber
    where TQueue : struct
    where TMessage : class
  {
    TQueue Queue { get; }
    Task<bool> CallbackAsync(TMessage message);
  }

and an Abstract class of ISubscribe

  public abstract class Subscriber<TExchange, TQueue, TMessage> : ISubscriber<TQueue, TMessage> 
    where TExchange : IEventBusExchange<TQueue, TMessage>
    where TQueue : struct
    where TMessage : DtoBase
  {
    ...
  }

What i want to do, is extract TQueue and TMessage from IEventbusExchange so i can make the abstract class more simple and type safe.

Is it possible to do this in c#?

The solution should look like this:

  public abstract class Subscriber<TExchange> : ISubscriber<TQueue, TMessage>   
    where TExchange : IEventBusExchange<TQueue, TMessage>
  {
    ...
  }
0 Answers
Related