[英]How to make an extension method on interface available on all implementing classes?
[英]How to make Interface available in all Controllers?
我有许多控制器,我希望它们都具有一个PageConfiguration
需要根据URL创建的PageConfiguration
对象的接口。 除了在action方法中创建接口外,我不确定如何执行此操作,因为它们可以访问Request.QueryString
,而Controllers构造函数则没有。 我是否需要在Application_BeginRequest
创建一个全局对象? 我可以采取什么方法来满足此要求? 谢谢
编辑:此代码概述了我正在尝试执行的操作:
public class ResultsController : Controller
{
private IPageConfiguration page;
public ResultsController()
{
page = new PageConfiguration("?"); // needs value from query string
}
}
public class FactsheetController : Controller
{
private IPageConfiguration page;
public FactsheetController()
{
page = new PageConfiguration("?"); // needs value from query string
}
}
最简单的方法是创建一个动作过滤器。 做这些:
true
。 这样,您就可以使查询字符串处理变得通用和自动化,因为您不必将此操作过滤器附加到所有操作上。 它已通过继承方式附加到所有子控制器类。
您可以使用Initialize方法。 有一个定义此受保护属性的基本控制器,并在Initialize
方法中设置该值。 然后,当所有控制器都从基本控制器派生时,他们将有权访问该属性。
好吧,创建全局对象使我感到困扰,因为您可能会一次处理多个请求。 在会话状态下创建对象会更好一些,因为MVC默认情况下会序列化会话中的所有请求,但是将来您仍然可能会遇到并发问题。 老实说,我认为最好的方法就是在每个需要它的动作方法中创建对象。
一种方法是使用动作过滤器。 您可以在此处看到一个简单的示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.