Bit*_*ian 5 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);
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;
}
Run Code Online (Sandbox Code Playgroud)
我在想,应该为我做这件事,但我在SignalR注射时不断收到错误
"无法将类型'SignalR.Ninject.NinjectDependencyResolver'隐式转换为'Microsoft.AspNet.SignalR.IDependencyResolver'"
知道问题是什么吗?
我不确定你是否找到了答案.从版本1.0.0开始,它们已经改变了DI在SignalR中的工作方式,并且SignalR.Ninject软件包不起作用 - 我在这篇文章上写了一篇小博文:http://myrandomcodesnippets.wordpress.com/2013/03/ 29/ninject依赖性喷射与-signalr-1-0-1 /
基本上你需要创建自己的实现,这与SignalR.Ninject实现相同:
GlobalHost.DependencyResolver = new SignalRNinjectDependencyResolver(kernel);
Run Code Online (Sandbox Code Playgroud)
当你创建新类时,它希望从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));
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
2558 次 |
| 最近记录: |