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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Autofac学习系列之-入门

發布時間:2023/12/29 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Autofac学习系列之-入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Autofac是什么?

Autofac是一種IOC容器,那么什么是IOC容器呢?

先說一下兩個概念IOC和DI,我的理解:

  ① IOC:調用者不再創建(不自己new)被調用者的實例,而是交給容器去創建(AutoFac就充當這里的容器),這就是控制反轉。

  ② DI:容器創建好的實例再注入調用者的過程,就是依賴注入(比如:屬性注入、構造函數注入等)。

控制反轉

控制反轉背后的核心思想是, 我們不再將類綁定在應用里,讓類自己去 "new up" 他們的依賴, 而是反過來在類的構造方法中將依賴傳遞進去

Autofac入門

將Autofac整合到你的應用的基本模式如下:

  • 按照?控制反轉?(IoC) 的思想構建你的應用.
  • 添加Autofac引用.
  • 在應用的 startup 處...
  • 創建?ContainerBuilder.
  • 注冊組件.
  • 創建容器,將其保存以備后續使用.
  • 應用執行階段...
  • 從容器中創建一個生命周期.
  • 在此生命周期作用域內解析組件實例.

構建應用

新建一個MVC應用如下

Model層

using System;namespace AutoFac.Model {public class UserModel{public string UserId { get; set; }public string UserName { get; set; }public DateTime CreateDate { get; set; }} }

Repository層

using AutoFac.Model;namespace AutoFac.Repository.IRepository {public interface IUserRepository{void AddUser(UserModel model);} } using AutoFac.Model; using AutoFac.Repository.IRepository;namespace AutoFac.Repository.Repository {public class UserRepository:IUserRepository{public void AddUser(UserModel model){//do something}} }

Service層

using AutoFac.Model;namespace AutoFac.Service {public interface IUser{void Add(UserModel model);} } using AutoFac.Model; using AutoFac.Repository.IRepository;namespace AutoFac.Service {public class User:IUser{private IUserRepository _userRepository;public User(IUserRepository userRepository){this._userRepository = userRepository;}public void Add(UserModel model){this._userRepository.AddUser(model);}} }

Web層(注意引用)

using System.Reflection; using System.Web.Mvc; using Autofac; using Autofac.Integration.Mvc; using AutoFac.Repository.IRepository; using AutoFac.Repository.Repository; using AutoFac.Service; namespace AutoFacDemo.App_Start {public class AutoFacManager{public static void RegisterAutoFac(){var builder = new ContainerBuilder();builder.RegisterControllers(Assembly.GetExecutingAssembly());builder.RegisterType<User>().As<IUser>().InstancePerLifetimeScope();builder.RegisterType<UserRepository>().As<IUserRepository>().InstancePerDependency();var container = builder.Build();var resovler = new AutofacDependencyResolver(container);DependencyResolver.SetResolver(resovler);}} }

控制器調用

using AutoFac.Model; using AutoFac.Service; using System.Web.Mvc;namespace AutoFacDemo.Controllers {public class HomeController : Controller{private IUser _user;public HomeController(IUser user){_user = user;}public ActionResult Index(){var model = new UserModel();model.UserId = "12312";model.UserName = "測試";_user.Add(model);return View();}} }

?

現在當運行程序時...

  • Add方法手動地從生命周期中解析?IUser?. (這就是 "服務定位.") 在內部地...
    • Autofac發現?IUser?對應 User因此開始創建?User.
    • Autofac發現?User在它構造方法中需要一個?IUserRepostiory. (這就是 "構造方法注入.")
    • Autofac發現?IUserRepostiory對應?UserRepostiory?因此開始創建新的?UserRepostiory實例.
    • Autofac使用新的?UserRepostiory實例完成?User?的創建.
    • Autofac返回完整構建的?User給"Add"使用.

注意: 通常來說, 服務定位模式大多情況應被看作是一種反模式??也就是說, 在代碼中四處人為地創建生命周期而少量地使用容器并不是最佳的方式. 使用?Autofac 集成類庫?時你通常不必做在示例應用中的這些事. 這些東西都會在應用的中心,"頂層"的位置得到解決, 人為的處理是極少存在的. 當然, 如何構建你的應用取決于你自身.

總結

以上是生活随笔為你收集整理的Autofac学习系列之-入门的全部內容,希望文章能夠幫你解決所遇到的問題。

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