.net 信号器2.0与Ninject的接口注入
我有以下简单的Hub类来列出使用注入用户服务的用户。使用NinjectSignalerDependencyResolver的启动类。非常简单的客户端脚本 中心 startup.cs NinjectSignalerDependencyResolver.net 信号器2.0与Ninject的接口注入,.net,dependency-injection,ninject,signalr,.net,Dependency Injection,Ninject,Signalr,我有以下简单的Hub类来列出使用注入用户服务的用户。使用NinjectSignalerDependencyResolver的启动类。非常简单的客户端脚本 中心 startup.cs NinjectSignalerDependencyResolver 如何配置SignalR 2.0和Ninject以允许集线器具有依赖注入构造函数参数?实现这一点的最简单方法是完全摆脱自定义依赖解析程序,只需使用非常简单的IHubActivator即可 startup.cs Hubactivator.cs 注册服务
如何配置SignalR 2.0和Ninject以允许集线器具有依赖注入构造函数参数?实现这一点的最简单方法是完全摆脱自定义依赖解析程序,只需使用非常简单的IHubActivator即可 startup.cs Hubactivator.cs 注册服务
私有静态无效注册服务(IKernel内核)
{
GlobalHost.DependencyResolver.Register(typeof(IHubActivator),()=>新的HubActivator(内核));
kernel.Bind().To().InSingletonScope();
...
}
就这么简单-一切正常,接口都像你期望的那样被注入到构造函数中…这可能会有所帮助:感谢linkl-但我已经在使用相同的依赖项解析程序和技术。你是如何初始化/设置解析程序的?您正在执行类似于
GlobalHost.dependencysolver=newninjectsignalderdependencysolver(内核)的操作代码>?我试着把它放在app.mapsignator(config)行的前后;但这也没什么区别time@Code唯一的一点是,您需要在startup.cs的Start方法中为IUserService创建绑定。下面的链接可能会帮助您:非常棒的答案,但是,我无法使用GetInstance
。也许库已经更新了,但是我能够使用return(IHub)container.GetService(descriptor.HubType)
来解决我的中心依赖关系。谢谢
[HubName("dashboardHub")]
public class DashboardHub : Hub
{
private readonly IUserService _users;
public DashboardHub(IUserService users)
{
_users = users;
}
public void Initialize()
{
var users = _users.ListUsers();
Clients.All.UpdateStatus(users);
}
}
var kernel = new StandardKernel();
var resolver = new NinjectSignalRDependencyResolver(kernel);
var config = new HubConfiguration()
{
Resolver = resolver,
};
app.MapSignalR(config);
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));
}
}
<script>
$(function () {
var dashboard = $.connection.dashboardHub;
dashboard.client.updateStatus = function (users) {
var elem= $('.userList');
elem.html('');
$.each(users, function (i, user) {
parent.append("<p>" user.Name + "<p>");
});
};
$.connection.hub.start().done(function () {
dashboard.server.initialize();
});
});
</script>
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IUserService >().To<UserService>().InSingletonScope();
...
}
public DashboardHub()
{
}
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
}
public class HubActivator : IHubActivator
{
private readonly IKernel container;
public HubActivator(IKernel container)
{
this.container = container;
}
public IHub Create(HubDescriptor descriptor)
{
return (IHub)container.GetInstance(descriptor.HubType);
}
}
private static void RegisterServices(IKernel kernel)
{
GlobalHost.DependencyResolver.Register(typeof(IHubActivator), () => new HubActivator(kernel));
kernel.Bind<IUserService >().To<UserService>().InSingletonScope();
...
}