日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET MVC 5 使用autofac实现DI

發布時間:2025/5/22 asp.net 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET MVC 5 使用autofac实现DI 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 使用Nuget添加Autofac.MVC的引用
  • 啟動項設置
  • 注冊Controller
  • 注冊ModelBinder
  • 注冊相關的web abstraction
  • 為View層啟用屬性注入
  • 為Action Filter啟用屬性注入

?

???使用Nuget添加Autofac.MVC的引用

???????

?啟動項設置

protected void Application_Start(){AreaRegistration.RegisterAllAreas();RouteConfig.RegisterRoutes(RouteTable.Routes);var builder = new ContainerBuilder();builder.RegisterType<BookService>().As<IBookService>();builder.RegisterType<Logger>().As<ILogger>();// Register your MVC controllers. (MvcApplication is the name of// the class in Global.asax.)builder.RegisterControllers(typeof(MvcApplication).Assembly);// OPTIONAL: Register model binders that require DI.builder.RegisterModelBinders(typeof(MvcApplication).Assembly);builder.RegisterModelBinderProvider();// OPTIONAL: Register web abstractions like HttpContextBase.builder.RegisterModule<AutofacWebTypesModule>();// OPTIONAL: Enable property injection in view pages.builder.RegisterSource(new ViewRegistrationSource());// OPTIONAL: Enable property injection into action filters.builder.RegisterFilterProvider();// Set the dependency resolver to be Autofac.var container = builder.Build();DependencyResolver.SetResolver(new AutofacDependencyResolver(container));}

?注冊Controller

  • 注冊當前程序集下的所有Controller

  • builder.RegisterControllers(typeof(MvcApplication).Assembly);
  • 注冊單個Controller
  • builder.RegisterType<HomeController>().InstancePerRequest();
  • ??注冊ModelBinder

  • 在啟動項中注冊ModelBinder
  • builder.RegisterModelBinders(typeof(MvcApplication).Assembly);
    builder.RegisterModelBinderProvider();
  • 自定義ModelBinder并且設置ModelBinderTypeAttribute
  • [ModelBinderType(typeof(Book))]public class BookModelBinder : IModelBinder{public ILogger logger;public BookModelBinder(ILogger logger){this.logger = logger;}public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext){HttpRequestBase request = controllerContext.HttpContext.Request;string title = request.Form.Get("Title");string BookID = request.Form.Get("BookID");string day = request.Form.Get("Day");string month = request.Form.Get("Month");string year = request.Form.Get("Year");return new Book { BookID=BookID, Title=title+":DI Test"+this.logger.Log("dsa")+request.Form.Get("HttpRequestBaseDI"), Date=year+"-"+month+"-"+day };}}

    ?注冊相關的Web Abstract Class

  • 啟動項設置

    // OPTIONAL: Register web abstractions like HttpContextBase.
    ? builder.RegisterModule<AutofacWebTypesModule>();

  • 實例(在ModelBinder中使用HttpRequestBase)
  • [ModelBinderType(typeof(Book))]public class BookModelBinder : IModelBinder{ILogger logger;HttpRequestBase request1;public BookModelBinder(ILogger logger, HttpRequestBase request){this.logger = logger;this.request1 = request;}public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext){HttpRequestBase request = controllerContext.HttpContext.Request;request = request1;string title = request.Form.Get("Title");string BookID = request.Form.Get("BookID");string day = request.Form.Get("Day");string month = request.Form.Get("Month");string year = request.Form.Get("Year");return new Book { BookID=BookID, Title=title+":DI Test"+this.logger.Log("dsa")+request.Form.Get("HttpRequestBaseDI"), Date=year+"-"+month+"-"+day };}}

    ?在View層實現屬性注入

  • 啟動項設置 builder.RegisterSource(new ViewRegistrationSource());
  • 實現自定義的ViewPage

    這里的例子使用的是一個強類型的View,所以實現了一個泛型ViewPage

    ?public abstract class CustomViewPage<T> : WebViewPage<T>
    ??? {
    ??????? public ILogger Logger { get; set; }
    ??? }?
  • View設置
  • @inherits MVC5Practices.Infrastructure.CustomViewPage<MVC5Practices.Infrastructure.Book>@{Layout = null; }<!DOCTYPE html><html> <head><meta name="viewport" content="width=device-width" /><title>ShowBook</title> </head> <body><div><h4>Book</h4><h5>@Logger.Log("dsa")</h5><hr /><dl class="dl-horizontal"><dt>@Html.DisplayNameFor(model => model.Title)</dt><dd>@Html.DisplayFor(model => model.Title)</dd><dt>@Html.DisplayNameFor(model => model.Date)</dt><dd>@Html.DisplayFor(model => model.Date)</dd></dl></div><p>@Html.ActionLink("Edit", "Edit", new { id = Model.BookID }) |@Html.ActionLink("Back to List", "Index")</p> </body> </html>

    ?為ActionFilter啟用屬性設置

  • 啟動項設置

    // OPTIONAL: Enable property injection into action filters.
    builder.RegisterFilterProvider();

  • 自定義Filter
  • public class CustomActionFilter : ActionFilterAttribute{public ILogger Logger { get; set; }public override void OnActionExecuting(ActionExecutingContext filterContext){Logger.Log("OnActionExecuting");}}

    ?

    轉載于:https://www.cnblogs.com/LittleFeiHu/p/6155883.html

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的ASP.NET MVC 5 使用autofac实现DI的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。