2014-02-08 3 views
1

Я немного новичок в NancyFx и TinyIoc, но здесь идет:Как зарегистрировать зависимость для signalr концентратору TinyIocContainer в NancyFx

Я был в состоянии использовать автоматическую регистрацию TinyIocContainer в NanxyFx впрыснуть зависимостей в Нанси Модули, которые очень аккуратные, все прекрасно и работают.

Но, как вы регистрируете зависимость для концентратора signalr, как показано ниже?

Я постоянно получаю сообщение классическую ошибку из signalr:

No parameterless constructor defined for this object. 

Моя установка:

У меня есть SignalR Hub:

[Hubname("chathub")] 
public class ChatHub: Hub { 

    private IChat _chat; 

    public ChatHub(Chat chat){ 
     _chat = chat; 
    } 

} 

Это моя зависимость:

public class Chat: IChat{ 

    public Chat(IHubConnectionContext clients, IChatRepo repo){ 
     ... 
    } 
} 

Я создал класс CustomBootstrapper:

public class CustomBootstrapper : DefaultNancyBootstrapper 
{ 
    protected override void ApplicationStartup(TinyIoCContainer container, Nancy.Bootstrapper.IPipelines pipelines) 
    { 
     base.ApplicationStartup(container, pipelines); 
     // I'm hoping the registration below will resolve for the IHubConnectionContext parameter for the Chat class 
     container.Register(GlobalHost.ConnectionManager.GetHubContext<ChatHub>().Clients); 
    } 
} 

У меня есть класс запуска:

public class Startup{ 
    var hubConfiguration = new HubConfiguration { EnableDetailedErrors = true}; 
    app.MapSignalR("/signalr", hubConfiguration); 
} 

Если у меня есть конструктор без параметров для ChatHub и использовать бедные жених Ioc, все работает отлично.

Я уверен, что у меня что-то не хватает.

Любые идеи?

ответ

1

Следующая статья должна дать вам информацию, которую нужно использовать инъекции зависимостей с SignalR:

http://www.asp.net/signalr/overview/signalr-20/extensibility/dependency-injection

«Простой Dependency Injection в SignalR» раздел показывает, как «вы можете легко зарегистрировать функцию создайте экземпляры хаба и используйте эту функцию для выполнения DI. "

Статья продолжает показывать, что вы можете пойти еще дальше и заменить преобразователь зависимостей SignalR на свой собственный контейнер IoC, такой как TinyIoC (хотя в статье используется Ninject в качестве примера).

+1

Спасибо за статью. - Я только что создал пользовательский DependencyResolver, но я не совсем уверен в настройке Resolver. например в статье он настраивает клиентский преобразователь через HubConfiguration. Где, как внутри Nancy, у меня есть CustomBootstrapper, который наследует от DefaultNancyBootstrapper и I на перегрузке ApplicationStartup, устанавливаю ли Resolver там что-то вроде: GlobalHost.DependencyResolver = new TinyIoCDependencyResolver (container)? Я пробовал оба, но безрезультатно. –

+0

Не уверен, что он был оставлен для краткости, но ваш класс Startup не имеет метода «Конфигурация (IAppBuilder app)» в соответствии с приведенной выше статьей. Не уверен, что с вашим стеком Owin по-прежнему участвует, но в моем приложении MVC5 есть также следующая директива сборки: '[сборка: OwinStartup (typeof (Namespace.Of.Startup))]' – Shaun