0
我们使用Ninject作为Signalr的DI容器。我似乎无法将ITransportHeartbeat
注入到我的一个类中。我使用这个接口来管理Signalr推荐的客户端存在。Ninject的SignalR依赖关系解析器问题
public class NinjectSignalRDependencyResolver : DefaultDependencyResolver
{
private readonly IKernel _Kernel;
public NinjectSignalRDependencyResolver(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));
}
}
Startup.cs
public void Configuration(IAppBuilder app)
{
var kernel = GetKernel();
var resolver = new NinjectSignalRDependencyResolver(kernel);
var config = new HubConfiguration { Resolver = resolver }
GlobalHost.DependencyResolver = resolver;
GlobalHost.HubPipeline.AddModule(kernel.Get<ErrorModule>());
app.MapSignalR(config);
var bootstrapper = new Bootstrapper();
bootstrapper.Initialize(() =>
{
return kernel;
});
///monitor1 is set to null
var monitor1=GlobalHost.DependencyResolver.Resolve<IMyClass>();
//monitor2 is set to null
var monitor2=_kernel.Get<IMyClass>();
}
我自Ninject绑定:
private IKernel GetKernel()
{
if (_kernel != null) return _kernel;
var kernel = new StandardKernel();
kernel.Bind<Func<IKernel>>().ToMethod(ctx =>() => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
kernel.Load(new HubModule());
kernel.Load(new LogModule());
kernel.Load(new DaoModule());
return kernel;
}
我自己的类:
Public class MyClass : IMyClass
{
ITransportHeartbeat _heartbeat;
IClientListDao _clientList;
MyClass(IClientListDao clientList, ITransportHeartbeat heartbeat)
{
_hearbeat=heartbeat;
_clientList=clientList;
}
.
.
}
在上述MyClass的,Ninject注入的对象IClientDao但不适用于ITransportH eartbeat。我没有将这个接口绑定到任何东西,因为这是由默认解析器完成的。我在这里做错了什么?为什么默认解析器不为ITransportHeartbeat注入一个对象?