asp.net-mvc – MVC – 如何在整个应用程序中实例化,存储和创建
我正在开发一个MVC应用程序来服务多个域 – 每个域都是一个大公司的分支.
LocalBranch类存储详细信息,如电话,地址,电子邮件,位置坐标等. 我想为每个http请求创建一个这个类的单个实例,并让它在整个应用程序中可用 – 从控制器,视图,一些帮助程序类和其他代码. 有推荐的方法吗? 现在我将它作为BaseController上的属性并使用ViewBag将其传递给视图.但如果可能的话,我希望它强烈输入视图. 我不想把它放在一个应用程序变量中,因为我们需要为不同的域提供不同的值. 如果可能的话,我宁愿避免使用会话变量,因为我们可能会在未来扩展到使用多个服务器,而且我听说这对会话不起作用. 如果您认为有更清晰的方式来表达我所追求的内容,请随时更新标签/标题.谢谢. 解决方法
你在这里有两个问题.第一个是“如何根据HttpRequest创建此类的单个实例?”第二个是“我如何将其用于强类型视图?”
@ amir-popovich几乎已经回答了第一个使用依赖注入的问题.但是,FWIW我可能会使用Ninject而不是Unity(只是偏好,真的),我可能会以不同的方式实现它.我不会使用HttpContext,只是构建一个服务(使用Ninject的OnePerHttpRequest模块进行实例化,将域作为参数传递以获取正确的值). 然后,为了将这些LocalBranch值添加到强类型视图模型,您可以首先创建一个包含此类型的基本视图模型: public class BaseViewModel { public LocalBranch Branch {get;set;} } 然后,使所有当前视图模型继承此基本类型 public MyViewModel : BaseViewModel { public string SomeValue {get;set;} } 然后在您的控制器中,很容易从您从第一步创建的服务中添加这些值 public ActionResult SomeAction() { var vm = new MyViewModel(); vm.Branch = LocalBranchService.GetLocalBranchValues(); //Local Branch Service has been injected with Ninject //do other stuff return View(vm); } 但是,将其添加到每个控制器操作变得非常繁琐,因此您可以创建一个结果过滤器来为您添加它: public class LocalBranchResultFilter : FilterAttribute,IResultFilter { public void OnResultExecuting(ResultExecutingContext filterContext) { //This method gets invoked before the ActionResult is executed. filterContext.Controller.ViewData.Model.Branch = LocalBranchService.GetLocalBranchValues(); //Local Branch Service has been injected with Ninject } } 现在,您可以使用过滤器装饰Controller和/或Actions(如果需要,您甚至可以在全局过滤器中设置它). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.NET MVC将数据从视图传递给控制器
- ASP.NET图表控件 – 如何使用空自动绘制图表区域?
- ASP.NET Web Api HttpResponseException 400(错误请求)被II
- asp.net – 两个用户控件之间的交互
- asp.net – 在fileupload中选择立即调用C#函数文件
- asp.net-web-api – 无法从服务器读取.它可能没有适当的访问
- asp.net – 如何将trace.axd导出到文件
- asp.net-mvc – 如何使用我的Error.cshtml视图中的过滤器放
- 白话ASP.NET MVC之三:Controller是如何解析出来的
- asp.net-mvc – 如何在ASP.NET MVC模型中获取当前用户
- asp.net-mvc – @ Html.Action in Asp.Net Core
- ASP.NET -- WebForm -- Session的使用
- asp.net – 在Visual Studio 2015中保存* .cs或*
- 使用asp.net发送20,000封电子邮件
- asp.net-mvc – Elmah.MVC对Elmah.contrib.Mvc
- 在ASP.NET中,当HttpContext.Current为NULL时,如何
- asp.net – IIS 7禁用“需要SSL”
- 深入理解C# 3.x的新特性(5):Object Initializ
- asp.net-mvc – 我什么时候应该在asp.net mvc应用
- asp.net-mvc – 在应用程序池回收后,如何预热我的