Autofac学习系列之-入门
生活随笔
收集整理的這篇文章主要介紹了
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学习系列之-入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 弘辽科技:淘宝精品推荐在哪里设置?如何选
- 下一篇: What Types of Movies