asp.net-mvc-3 – Autofac属性注入
我正在改变我的Asp.Net MVC3项目,使用Autofac将服务注入我的控制器.到目前为止,这一直非常简单.我的服务都有一个Telerik OpenAccess db属性,我通过构造函数注入(在服务基类中).而且我的控制器都有服务的构造函数属性,这些属性也会被注入.
我有一个名为AuditInfo的类,它封装了控制器的可审计属性: public class AuditInfo { public string RemoteAddress { get; set; } public string XForwardedFor { get; set; } public Guid UserId { get; set; } public string UserName { get; set; } } 我的服务类中的OpenAccess db属性需要将一个此类的实例注入其中,以便在各种数据库调用中用作审计信息. 问题是这不是可以在Application_Start实例化的类,因为至少有两个属性RemoteAddress和XForwardedFor在OnActionExecuting的最早阶段填充,即一旦存在Request变量. 因此,我在我的BaseController类的OnActionExecuting方法中实例化这样: protected override void OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); db.AuditInfo = AuditInfo; } public AuditInfo AuditInfo { get { return new AuditInfo() { RemoteAddress = this.Request.ServerVariables["REMOTE_ADDR"],XForwardedFor = this.Request.ServerVariables["X_FORWARDED_FOR"],UserId = this.UserId,UserName = this.UserName }; } } 所以 – 我的问题是: >我不喜欢直接进入OnActionExecuting的OpenAccess db属性. 我如何设置autofac将AuditInfo注入任何将其作为属性的类?或者是否有更好的方法来回避循环依赖并使用某种形式的lambda / lazy构造函数属性? 即使许多请求可能是同一会话的一部分并且没有不同的IP地址/用户信息,但是在每次请求时可能会不必要地重新初始化AuditInfo吗? 谢谢 解决方法
结果是
Autofac’s MVC Integration can resolve an
HttpRequestBase for you.所以你不需要直接引用HttpContext.Current.Request.
Autofac在幕后实施uses 所以你可以像Steven建议的那样做一个IAuditInfoFactory,但是在它的构造函数中需要一个HttpRequestBase,而不是使用HttpContext.Current,如果它让你对不引用静态变量感觉更好. 此外,没有循环依赖,如果需要,您可以构造函数注入AuditInfo: builder.Register(c => c.Resolve<IAuditInfoFactory>().CreateNew()) .As<AuditInfo>() .InstancePerHttpRequest(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 第11章 ASP.NET Web API
- asp.net-mvc – asp.net mvc未经授权的回复是空白页吗?
- 如何获得干净的ASP.Net错误页面?
- asp.net-mvc – 如何在mvc.net中实现安全认证和角色机制?
- asp.net-mvc-4 – / signalr / hubs未加载到asp.net mvc4:
- 一步步开发自己的博客 番外篇(7、异步记录日志 和 文章阅读
- asp.net – 我必须为每个ASP按钮添加CausesValidation =“F
- ASP.NET页面级缓存(带有经过身份验证的站点)
- asp.net-mvc-3 – 为什么这个代码不删除布局?
- asp.net – 您没有使用批量加载语句的权限
- 具有任意数量的键值对的ASP.NET路由 – 是否可能
- asp.net – WCF服务支持文件jsdebug无法加载
- asp.net-core – app.UseErrorHandler()可以访问
- 重构ASP.NET 2.0应用程序更“现代”
- 将图表绘制到ASP.NET MVC 4(Razor,C#)网站
- log4net 日志框架的配置
- entity-framework-4 – 通过扩展方法的IDbSet和公
- asp.net-mvc-3 – ASP.NET MVC3条件验证EditorTe
- asp.net-mvc – 无法在实体框架模型中的MVC 4模板
- asp.net-mvc-2 – 将日期参数传递给RedirectToAc