Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# signer的Ninject依赖注入_C#_Asp.net_Asp.net Mvc_Ninject_Signalr - Fatal编程技术网

C# signer的Ninject依赖注入

C# signer的Ninject依赖注入,c#,asp.net,asp.net-mvc,ninject,signalr,C#,Asp.net,Asp.net Mvc,Ninject,Signalr,在我的NinjectWebCommon.cs文件中,在CreateKernel方法下,我像这样应用注入 private static IKernel CreateKernel() { var kernel = new StandardKernel(); kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);

在我的
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;
    }
private静态IKernel CreateKernel()
{
var kernel=新的标准内核();
kernel.Bind().ToMethod(ctx=>()=>newbootstrapper().kernel);
kernel.Bind().To();
注册服务(内核);
//Web API注入
GlobalConfiguration.Configuration.DependencyResolver=新的NinjectDependencyResolver(内核);
//信号注入
GlobalHost.DependencyResolver=新信号器.Ninject.NinjectDependencyResolver(内核);
返回内核;
}
我本以为这应该对我有用,但我一直在信号机注射时出错

“无法将类型'SignalR.Ninject.NinjectDependencyResolver'隐式转换为'Microsoft.AspNet.SignalR.IdependencySolver'”


你知道问题出在哪里吗?

我不确定你是否找到了答案。从版本1.0.0开始,他们已经改变了DI在SignalR中的工作方式,SignalR.Ninject软件包不起作用-我已经就此写了一篇小博客文章:

基本上,您需要创建自己的实现,这与Signal.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));
    }
}

公共类SignalRNinjectDependencyResolver:DefaultDependencyResolver
{
私有只读IKernel_内核;

公共信号RNInjectDependencyResolver(IKernel内核) { _内核=内核; } 公共重写对象GetService(类型serviceType) { 返回_kernel.TryGet(serviceType)?base.GetService(serviceType); } 公共重写IEnumerable GetServices(类型serviceType) { 返回_kernel.GetAll(serviceType).Concat(base.GetServices(serviceType)); } }

希望这能有所帮助。

我不确定这两个版本是否兼容,但您可以尝试在执行赋值时将依赖项解析程序键入
(Microsoft.AspNet.signal.idependencysolver)
。它确实会删除错误,但ninject依赖项注入不起作用。从我看到的帖子来看,这种类型转换本来就不必要……不知道问题出在哪里您确定您的
NinjectDependencyResolver
继承自
Microsoft.AspNet.signar.idependencySolver
?你能粘贴代码吗?我对signar一点也不熟悉,你在cast的一边使用一个“I”接口,而在另一边使用一个“真实对象”。有“I”NinjectDependencyResolver吗?@AlexG signal.Ninject.NinjectDependencyResolver是由signer.Ninject库提供的,所以我只是在使用它。是的,它继承自DefaultDependencyResolver,而DefaultDependencyResolver又继承自IdependencySolversignalNinjectDependencyResolver,这很好,但这还不足以在解决方案中使用模块。请更新一下?自从我写这篇文章以来,信号员已经进步了很多。您可能想看看如何使用Owin实现SignalR/在问题中发布问题。