我试图将依赖项注入到共享布局视图页面中,以避免必须在每个使用布局的视图中进行依赖。

我已经按照Wiki中的guidance将依赖项注入视图,但是该属性始终为null。

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

这是我的设置。
CustomViewPage

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));


使用布局的“子”视图不从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/

10-12 12:21
查看更多