asp.net-mvc - Autofac 可以将依赖项注入(inject)到布局 View 文件中吗?

标签 asp.net-mvc dependency-injection asp.net-mvc-4 autofac

我正在尝试将依赖项注入(inject)到共享布局 View 页面中,以避免在使用该布局的每个 View 中都必须这样做。

我关注了guidance在 wiki 中用于将依赖项注入(inject) View ,但该属性始终为空。

Autofac 可以将属性注入(inject)到作为布局文件的自定义 View 页面中吗?

这是我的设置。
自定义 View 页面

namespace MyApp
{
    using System.Web.Mvc;

    public abstract class CustomViewPage : WebViewPage
    {
        public IHelper Helper { get; set; }
    }
}

~/Views/Shared/_Layout.cshtml
@inherits MyApp.CustomViewPage
<!DOCTYPE html>
<html>
...
@if(this.Helper.HasFoo()){@Html.ActionLink("Bar")}

全局注册...
builder.RegisterType<Helper>().AsImplementedInterfaces();
builder.RegisterModelBinderProvider();
builder.RegisterFilterProvider();
builder.RegisterModule(new AutofacWebTypesModule());
builder.RegisterSource(new ViewRegistrationSource());
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

使用布局的“子” View 不是从 CustomViewPage 派生的。

最佳答案

大多数解决方案将只是 DependencyResolver.Current.GetService 调用的包装器,因此直接从布局调用它可能更容易:

@{
    var helper = DependencyResolver.Current.GetService<IHelper>();
}
...
@if (helper.HasFoo()) { @Html.ActionLink("Bar") }
...

这种方式也有助于使页面模型更加 SRP,因为可以避免混合服务例程/模型和业务例程/模型。

关于asp.net-mvc - Autofac 可以将依赖项注入(inject)到布局 View 文件中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11593580/

相关文章:

c# - 在 web/api 应用程序中连接到 Cassandra 的正确方法

c# - MVC3 中的 Ninject 依赖注入(inject) - 在 Controller 之外

c# - 从 JQuery 将 JSON 发布到 ASP.NET MVC 4 操作

asp.net-mvc - MVC5 读取配置值而不使用 System.Web

c# - asp.net mvc 2 Controller 是如何实例化的?

c# - 将类实现从 ASP.NET MVC 移植到 ASP.NET MVC 核心

C# MVC - Razor 复杂嵌套表单提交不具有约束力

dependency-injection - Ninject:使用哪种注入(inject)模式来注入(inject)多个依赖项?

javascript - Angular2依赖注入(inject),类继承期间不注入(inject)服务

asp.net-mvc - 自定义 UserProfile 类 SimpleMembershipProvider