2014-10-21 1 views
1

Имейте сценарий, в котором хотели бы иметь общий базовый интерфейс и затем иметь производные интерфейсы, которые затем могут иметь базовые элементы по умолчанию и производные по потребностям. код будет выглядеть примерно так, как показано нижеSignalR Hub <T> поддержка реализации для базового интерфейса

public interface IBaseClient 
{ 
    Task MessageBroadCast(dynamic msg); 
} 

public interface IXXClient : IBaseClient 
{ 
    Task XXX(YYY msg);  
    //Any Additional Client methods should go here 
} 

public abstract class BaseHub<T> : Hub<T> where T : class 
{ 
    public override System.Threading.Tasks.Task OnDisconnected(bool stopCalled) 
    { 
     // Do any logic here 
     return base.OnDisconnected(stopCalled); 
    } 
} 
public class XXHub : BaseHub<IXXClient> 
{ 
    // Can Do a broadcast from here 
    // The below will work in a method and you see the MessageBroadCast with strongly typing 
    Clients.All.XXX(msg); 
    // Support for below is not present at least in the version I have or may be I'm missing something. 
    Clients.All.MessageBroadCast(msg); 
} 

проблемы или информации, необходимой: В SignalR 2.1 Ядра: Получить сообщение об ошибке, говорящее реализации IXXClient не предусмотренных MessageBroadCast.

Есть ли какая-либо конкретная причина, по которой методы базового интерфейса не собираются во время создания Type by SignalR во время выполнения. Чтобы быть конкретным в GenerateInterfaceImplementation (ModuleBuilder moduleBuilder)

Это что-то ограниченное с точки зрения дизайна. Было бы неплохо иметь возможность поддерживать некоторые общие операции в базовом интерфейсе. Пожалуйста, предложите.

Спасибо за ваше время!.

ответ

1

Это ошибка в реализации SignalR Hub<T>. Как вы обнаружили, поддержка производных интерфейсов отсутствует.

Не существует особых причин, по которым методы базового интерфейса не подбираются. Это был просто недосмотр. Я могу сказать это с уверенностью, потому что I wrote the feature :(.

В то же время, чтобы работать вокруг этого вопроса, вам нужно будет поместить все ваши методы клиента в одном интерфейсе. Я знаю, что это далеко от идеала.

Вы можете следить за the bug report for this on GitHub.Несмотря на то, что ошибка не указана. Не стесняйтесь комментировать проблему, указывая на то, что исправление этой ошибки важно для вас. Это может помочь с trieaging.