2016-09-30 59 views
0

与大多数MVC实现一样,我的所有抽象服务都可以在Controller中使用。好吧,我创建了下面的HTML帮助的扩展,允许嵌入应用程序设置成HTML作为隐藏输入:如何从MVC HtmlHelper扩展中获取当前控制器?

public static MvcHtmlString HiddenForSetting<TResult>(this HtmlHelper htmlHelper, Expression<Func<IMyAppSettings, TResult>> expression, string name = null) 
{ 
    IMyAppSettings settings = null; 

    return MyHtmlHelpers.HiddenForSetting<IMyAppSettings, TResult>(htmlHelper, expression, settings, name); 
} 

的助手提供的设置对象,并允许消费者选择要嵌入的财产。 IMyAppSettings就是这样一种服务。所以我想从控制器本身获得这项服务。有没有从这个静态助手扩展方法访问控制器的方法?

注意:我不需要控制器名称!我需要控制器实例本身。

+0

您是否在为您的应用程序使用依赖注入?如果是的话,你是否尝试'参数注入'给你的助手扩展来获取'IMyAppSettings'的实例? –

+0

我们的应用程序使用依赖注入。控制器基类提供了一个注入其构造函数的“IMyAppSettings”的实现。我不熟悉参数注入。 – Jordan

回答

1

可以使用得到控制:

htmlHelper.ViewContext.Controller 

这是一个ControllerBase。如果你知道控制器的类型,你可以根据需要施放它。