代码之家  ›  专栏  ›  技术社区  ›  Arne Claassen

如何为ASP.NET MVC2母版页提供独立于控制器的模型

  •  3
  • Arne Claassen  · 技术社区  · 14 年前

    我在ASP.NET MVC2下使用强类型视图和autofac进行依赖注入,并试图通过依赖注入获得一个通用的动态头。一、 e.我希望这样做时,视图不必离开此内容(即使存在),我希望避免静态发现容器和手动解析,但我找不到通过ctor或属性注入轻松注入主视图或主视图中包含的部分视图的方法。

    我无法想象这是一个不寻常的任务,但我所能找到的方法就是控制器子类化,将数据填充到非类型化的ViewData中,子类化ViewModels,将主数据填充到模型中,或者静态解析,所有这些我都不喜欢使用。我忽略了什么?

    编辑 :正如已经指出的,DI进入母版页是在对抗框架。因此,我的问题被严重地陷害了:我并不真正关心母版页中的DI,但我在网站的chrome中有一个动态元素,即母版页。为它提供一个模型不应该是每个使用该主控制器的责任,因为它是请求上下文,而不是特定于控制器上下文。我完全承认直接注入母版页是不合适的。如果我可以注册一个单独的主控制器来另外调用,那就更好了。有可能吗?考虑到这一任务是为主控制器提供一个独立于控制器的模型,什么是适合框架的方法?或者MVC中的共享内容是否要求每个控制器都必须知道该内容?

    2 回复  |  直到 14 年前
        1
  •  7
  •   Darin Dimitrov    14 年前

    你可以用 child actions .

    控制器:

    public class MyHeaderController: Controller
    {
        private readony IRepository _repository;
        public MyHeaderController(IRepository repository)
        {
            _repository = repository;
        }
    
        [ChildActionOnly]
        public ActionResult Index() 
        {
            var model = _repository.GetSomeModel();
            return PartialView(model);
        }
    }
    

    <div><%= Html.Action("Index", "MyHeader") %></div>
    
        2
  •  0
  •   awrigley    14 年前

    您的问题源于混淆依赖项注入这个术语,并与ASP.NET MVC框架的工作方式作斗争。

    ASP.NET MVC中的母版页和视图用作模板。如另一个答案所述,孩子的行为将解决你的问题。

    供将来参考:

    依赖项注入指的是一种配置要注入类构造函数的参数的方法,并自动为您完成此操作,覆盖一些框架的默认值。这样做的目的是分离组件,使它们在其他优点中变得更可重用、更可测试、更统一。

    DI指的是并解决了代码问题,而不是UI问题。

    换言之,你在与框架抗争,这意味着你不理解它。

    如果这听起来像是吹毛求疵,我认为这一点必须强调,否则,你将混淆自己和其他人谁读了这个线程在未来。