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/在问题中发布问题。