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>
{
...
}