簡體   English   中英

SignalR的Ninject依賴注入

[英]Ninject Dependency Injection for SignalR

在我的NinjectWebCommon.cs文件中,在CreateKernel方法下,我正在應用這樣的注入

private static IKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
        kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

        RegisterServices(kernel);

        // Web API Injection
        GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver(kernel);                     

        // SignalR Injection
        GlobalHost.DependencyResolver = new SignalR.Ninject.NinjectDependencyResolver(kernel);

        return kernel;
    }

我在想,應該為我做這件事,但我在SignalR注射時不斷收到錯誤

“無法將類型'SignalR.Ninject.NinjectDependencyResolver'隱式轉換為'Microsoft.AspNet.SignalR.IDependencyResolver'”

知道問題是什么嗎?

我不確定你是否找到了答案。 他們已經改變了DI在版本1.0.0中的工作方式,並且SignalR.Ninject軟件包不起作用 - 我已經寫了一篇關於此的小博客文章: http ://myrandomcodesnippets.wordpress.com/2013/03/ 29 / ninject依賴性噴射與-signalr-1-0-1 /

基本上你需要創建自己的實現,這與SignalR.Ninject實現相同:

GlobalHost.DependencyResolver = new SignalRNinjectDependencyResolver(kernel);

當你創建新類時,它希望從IDependancyResolver繼承而不用這個並使用:

public class SignalRNinjectDependencyResolver : DefaultDependencyResolver
{
    private readonly IKernel _kernel;

    public SignalRNinjectDependencyResolver(IKernel kernel)
    {
        _kernel = kernel;
    }

    public override object GetService(Type serviceType)
    {
        return _kernel.TryGet(serviceType) ?? base.GetService(serviceType);
    }

    public override IEnumerable<object> GetServices(Type serviceType)
    {
        return _kernel.GetAll(serviceType).Concat(base.GetServices(serviceType));
    }
}

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM