Jos*_*osh 13 asp.net-mvc dependency-injection autofac asp.net-mvc-4
我正在尝试将依赖项注入共享布局视图页面,以避免在使用布局的每个视图中执行此操作.
我已经按照wiki中的指导将注入依赖项注入到视图中,但该属性始终为null.
Autofac可以将属性注入到作为布局文件的自定义视图页面中吗?
这是我的设置.CustomViewPage
namespace MyApp
{
using System.Web.Mvc;
public abstract class CustomViewPage : WebViewPage
{
public IHelper Helper { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
〜/查看/共享/ _Layout.cshtml
@inherits MyApp.CustomViewPage
<!DOCTYPE html>
<html>
...
@if(this.Helper.HasFoo()){@Html.ActionLink("Bar")}
Run Code Online (Sandbox Code Playgroud)
全球注册......
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));
Run Code Online (Sandbox Code Playgroud)
使用布局的"子"视图不是从CustomViewPage派生的.
Sta*_*tan 16
大多数解决方案只是DependencyResolver.Current.GetService调用的包装器,所以直接从布局调用它可能更容易:
@{
var helper = DependencyResolver.Current.GetService<IHelper>();
}
...
@if (helper.HasFoo()) { @Html.ActionLink("Bar") }
...
Run Code Online (Sandbox Code Playgroud)
这种方式也有助于使页面模型更加SRP,因为可以避免混合服务例程/模型和业务.
不仅使用 AutoFac 基本上无法在布局中实现 DI。您可能需要对 IOC 容器的引用来CustomViewPage解决依赖关系。
除非确实需要,否则就避免在视图中使用 DI(只是我的意见)。
从我的角度来看,我没有看到太多好处。我认为您不会为基本视图页面类编写单元测试,是吗?除非有什么特殊原因,否则就避免它。与其依赖容器,不如依赖具体实现。
| 归档时间: |
|
| 查看次数: |
5266 次 |
| 最近记录: |