我正在尝试将依赖项注入(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/