asp.net-mvc – 将Castle Windsor与SignalR集成 – 我该如何处理?
|
我开始使用SignalR,一旦完成所有配置,它都能很好地工作.但是,我工作的几乎所有应用程序都使用Castle Windsor,因此能够将它们组合在一起会很棒.我想这样做的原因是我可以在持久连接中使用Castle依赖项/服务. 我在源代码中挖了一下,看起来我可以用基于Castle的一个替换DependencyResolver(即,实现IDependencyResolver的Castle),或者我可以将DependencyResolver的用法更改为Castle. 哪一个是更好的主意?我可以使用另一种方法来组合Castle和SignalR吗? 谢谢, 解决方法2016年8月更新在评论之后,我不再使用下面的方法,但现在使用GlobalHost.DependencyResolver 所以在Global.asax.cs中我初始化了一些东西 public static void Init(IWindsorContainer container)
{
var conn = configurationManager.ConnectionStrings["SRSQL"].ConnectionString;
GlobalHost.DependencyResolver.Register(typeof(IHubActivator),() => new SignalHubActivator(container));
GlobalHost.DependencyResolver.Register(typeof(ILoggingService),container.Resolve<ILoggingService>);
//etc or you could just pass your existing container to the resolver
GlobalHost.DependencyResolver.UseSqlServer(conn);
}
然后在中心 private ILoggingService LoggingService{ get; set; }
public NotificationHub()
{
LoggingService = GlobalHost.DependencyResolver.Resolve<ILoggingService>();
}
并且为了完整性 public class SignalHubActivator: IHubActivator
{
private readonly IWindsorContainer _container;
public SignalHubActivator(IWindsorContainer container)
{
_container = container;
}
public IHub Create(HubDescriptor descriptor)
{
var result= _container.Resolve(descriptor.HubType) as IHub;
if (result is Hub)
{
_container.Release(result);
}
return result;
}
}
从2012年开始回答老问题 我选择了第一个设置我们自己的DependencyResolver的方法 AspNetHost.SetResolver(new SignalResolver(_container)); 如果需要,我可以提供SignalResolver,但暂时不考虑可读性. 另一个重要的注意事项是集线器必须有一个空的构造函数,所以我们的城堡容器通过属性注入,例如 public class NotificationHub : Hub,INotificationHub
{
public INotificationService NotificationService { get; set; }
和解析器要求 public class SignalResolver : DefaultDependencyResolver
{
private readonly IWindsorContainer _container;
public SignalResolver(IWindsorContainer container)
{
if (container == null)
{
throw new ArgumentNullException("container");
}
_container = container;
}
public override object GetService(Type serviceType)
{
return TryGet(serviceType) ?? base.GetService(serviceType);
}
public override IEnumerable<object> GetServices(Type serviceType)
{
return TryGetAll(serviceType).Concat(base.GetServices(serviceType));
}
private object TryGet(Type serviceType)
{
try
{
return _container.Resolve(serviceType);
}
catch (Exception)
{
return null;
}
}
private IEnumerable<object> TryGetAll(Type serviceType)
{
try
{
var array = _container.ResolveAll(serviceType);
return array.Cast<object>().ToList();
}
catch (Exception)
{
return null;
}
}
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 新安装的IIS. Aspx页面不会显示
- asp.net-mvc – 使用MVC Web应用程序时Nhibernate的最佳缓存
- asp.net – 使用jQuery以编程方式触发JavaScript中的事件
- asp.net-mvc – 使用asp.net mvc 2功能与火花浏览引擎
- asp.net-mvc-3 – 剃刀视图引擎,如何在html之间写入?
- ASP.NET主页面和内容页面中的表单元素
- asp.net-mvc-2 – ASP MVC2中部分缓存的当前做法是什么?
- asp.net – 如何将最新的TFS变更集编号插入到aspx页面?
- ASP.Net RSS提要
- asp.net-mvc-3 – ActionButton而不是ActionLink
- asp.net-mvc – 已经使用相同的参数类型定义了一
- asp.net-mvc-4 – DataAnnotation的必需属性
- asp.net – 错误:此程序集是由运行时比当前加载
- 如何做一个ASP.NET MVC Ajax表单与multipart/for
- 将ASP.NET成员资格表添加到我自己的现有数据库中
- asp.net – 自动修复与’ASPStateTempSessions’
- asp.net – 如何在.net 3.5中托管我的MVC3应用程
- 使用ActiveDirectory授权与ASP.NET身份
- asp.net-mvc-3 – 向@ Html.ValidationSummary添
- Autofac和ASP.NET Web API ApiController
