精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

ASP.NET MVC IOC 之AutoFac攻略

開發 后端
Autofac是.NET領域最為流行的IOC框架之一,既然它都這么牛X了,我們用它就理所當然了,所以推薦其為IOC的終極解決方案!

一、為什么使用AutoFac?

之前介紹了Unity和Ninject兩個IOC容器,但是發現園子里用AutoFac的貌似更為普遍,于是捯飭了兩天,發現這個東東確實是個高大上的IOC容器~

Autofac是.NET領域最為流行的IOC框架之一,傳說是速度最快的一個:

優點: 

  • 它是C#語言聯系很緊密,也就是說C#里的很多編程方式都可以為Autofac使用,例如可以用Lambda表達式注冊組件

  • 較低的學習曲線,學習它非常的簡單,只要你理解了IoC和DI的概念以及在何時需要使用它們

  • XML配置支持

  • 自動裝配

  • 與Asp.Net MVC 3集成

  • 微軟的Orchad開源程序使用的就是Autofac,從該源碼可以看出它的方便和強大

既然它都這么牛X了,我們用它就理所當然了,所以推薦其為IOC的終極解決方案!

二、AutoFac的使用

首先你必須獲取AutoFac,這里你可以通過各種方式加載它,我這里還是通過VS中的NuGet來加載AutoFac,不論是哪種方式,最終的目的就是將 Autofac.dll,Autofac.Configuration.dll 這兩個程序集引用到你的項目中。這樣在你的項目中,如果想使用AutoFac,只需添加其命名空間引用即可~

1、AutoFac入門

我們先定義一個數據訪問的接口:

  1. public interface IDAL  
  2. {  
  3.     void Insert(string commandText);  

然后用Sql和Oracle兩種方式分別實現上述接口,不過這里只是演示而已,所以并沒有真正去實現這兩個類,你懂的~

SQL方式:

  1. public class SqlDAL : IDAL  
  2. {  
  3.     public void Insert(string commandText)  
  4.     {  
  5.         Console.WriteLine("使用sqlDAL添加相關信息");  
  6.     }  

Oracle方式:

  1. public class OracleDAL : IDAL  
  2. {  
  3.     public void Insert(string commandText)  
  4.     {  
  5.         Console.WriteLine("使用OracleDAL添加相關信息");  
  6.     }  

然后注入實現構造函數注入:

  1. public class DBManager   
  2. {   
  3.     IDAL _dal;  
  4.     public DBManager(IDAL dal)   
  5.     {   
  6.         _dal= dal;  
  7.     }  
  8. public void Add(string commandText)   
  9.     {   
  10.         _dal.Insert(commandText);   
  11.     }  

最后要真正完成依賴注入就得AtuoFac登場了:

  1. var builder = new ContainerBuilder();   
  2. builder.RegisterType<DBManager>();   
  3. builder.RegisterType<SqlDAL>().As<IDAL>();   
  4. using (var container = builder.Build())   
  5. {   
  6.     var manager = container.Resolve<DBManager>();   
  7.     manager.Add("INSERT INTO Persons VALUES ('Man', '25', 'WangW', 'Shanghai')");   

從以上栗子可以看出,其實AutoFac的使用跟Unity的使用有點像,關鍵的東東就是這個Container容器類

2、AutoFac常用方法說明

(1)builder.RegisterType<Object>().As<Iobject>():注冊類型及其實例。例如下面就是注冊接口IDAL的實例SqlDAL

  1. ContainerBuilder builder = new ContainerBuilder();  
  2. builder.RegisterType<SqlDAL>().As<IDAL>();  
  3. IContainer container = builder.Build();  
  4. SqlDAL sqlDAL = (SqlDAL)container.Resolve<IDAL>(); 

(2)IContainer.Resolve<IDAL>():解析某個接口的實例。例如上面的最后一行代碼就是解析IDAL的實例SqlDAL

(3)builder.RegisterType<Object>().Named<Iobject>(string name):為一個接口注冊不同的實例。有時候難免會碰到多個類映射同一個接口,比如SqlDAL和OracleDAL都實現了IDAL接口,為了準確獲取想要的類型,就必須在注冊時起名字。

  1. builder.RegisterType<SqlDAL>().Named<IDAL>("sql");  
  2. builder.RegisterType<OracleDAL>().Named<IDAL>("oracle");  
  3. IContainer container = builder.Build();  
  4. SqlDAL sqlDAL = (SqlDAL)container.ResolveNamed<IDAL>("sql");  
  5. OracleDAL oracleDAL = (OracleDAL)container.ResolveNamed<IDAL>("oracle"); 

(4)IContainer.ResolveNamed<IDAL>(string name):解析某個接口的“命名實例”。例如上面的最后一行代碼就是解析IDAL的命名實例OracleDAL

(5)builder.RegisterType<Object>().Keyed<Iobject>(Enum enum):以枚舉的方式為一個接口注冊不同的實例。有時候我們會將某一個接口的不同實現用枚舉來區分,而不是字符串,例如:

  1. public enum DBType{ Sql, Oracle} 
  1. builder.RegisterType<SqlDAL>().Keyed<IDAL>(DBType.Sql);  
  2. builder.RegisterType<OracleDAL>().Keyed<IDAL>(DBType.Oracle);  
  3. IContainer container = builder.Build();  
  4. SqlDAL sqlDAL = (SqlDAL)container.ResolveKeyed<IDAL>(DBType.Sql);  
  5. OracleDAL oracleDAL = (OracleDAL)container.ResolveKeyed<IDAL>(DBType.Oracle); 

(6)IContainer.ResolveKeyed<IDAL>(Enum enum):根據枚舉值解析某個接口的特定實例。例如上面的最后一行代碼就是解析IDAL的特定實例OracleDAL

(7)builder.RegisterType<Worker>().InstancePerDependency():用于控制對象的生命周期,每次加載實例時都是新建一個實例,默認就是這種方式

(8)builder.RegisterType<Worker>().SingleInstance():用于控制對象的生命周期,每次加載實例時都是返回同一個實例

(9)IContainer.Resolve<T>(NamedParameter namedParameter):在解析實例T時給其賦值

  1. DBManager manager = container.Resolve<DBManager>(new NamedParameter("name""SQL")); 
  1. public class DBManager   
  2. {     
  3.     IDAL dal;  
  4.     public DBManager (string name,IDAL  _dal)  
  5.     {  
  6.         Name = name;  
  7.         dal= _dal;  
  8.     }  

3、通過配置的方式使用AutoFac

(1)先配置好配置文件

  1. <?xml version="1.0"?> 
  2.   <configuration> 
  3.     <configSections> 
  4.       <section name="autofac" type="Autofac.Configuration.SectionHandler, Autofac.Configuration"/> 
  5.     </configSections> 
  6.     <autofac defaultAssembly="ConsoleApplication1"> 
  7.       <components> 
  8.         <component type="ConsoleApplication1.SqlDAL, ConsoleApplication1" service="ConsoleApplication1.IDAL" /> 
  9.       </components> 
  10.     </autofac> 
  11.   </configuration> 

(2)讀取配置實現依賴注入(注意引入Autofac.Configuration.dll)

  1. static void Main(string[] args)  
  2.     {  
  3.         ContainerBuilder builder = new ContainerBuilder();  
  4.         builder.RegisterType<DBManager>();  
  5.         builder.RegisterModule(new ConfigurationSettingsReader("autofac"));  
  6.         using (IContainer container = builder.Build())  
  7.         {  
  8.             DBManager manager = container.Resolve<DBManager>();  
  9.             manager.Add("INSERT INTO Persons VALUES ('Man', '25', 'WangW', 'Shanghai')");   
  10.     }  

#p#

三、ASP.NET MVC與AtuoFac

終于到了ASP.NET MVC與AtuoFac雙劍合璧的時候了,下面就看看AtuoFac在MVC中的應用,其實很簡單,大概就幾個步驟搞定:

1、首先在函數Application_Start() 注冊自己的控制器類,一定要引入Autofac.Integration.Mvc.dll

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using System.Web.Http;  
  6. using System.Web.Mvc;  
  7. using System.Web.Optimization;  
  8. using System.Web.Routing;  
  9. using Autofac;  
  10. using AtuoFacOfMVC4.Models;  
  11. using System.Reflection;  
  12. using Autofac.Integration.Mvc;  
  13.  
  14.  
  15. namespace AtuoFacOfMVC4  
  16. {  
  17.    public class MvcApplication : System.Web.HttpApplication  
  18.     {  
  19.         protected void Application_Start()  
  20.         {  
  21.             var builder = new ContainerBuilder();  
  22.             SetupResolveRules(builder);  
  23.             builder.RegisterControllers(Assembly.GetExecutingAssembly());  
  24.             var container = builder.Build();  
  25.             DependencyResolver.SetResolver(new AutofacDependencyResolver(container));  
  26.  
  27.             AreaRegistration.RegisterAllAreas();  
  28.             WebApiConfig.Register(GlobalConfiguration.Configuration);  
  29.             FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);  
  30.             RouteConfig.RegisterRoutes(RouteTable.Routes);  
  31.             BundleConfig.RegisterBundles(BundleTable.Bundles);  
  32.             AuthConfig.RegisterAuth();  
  33.         }  
  34.         private void SetupResolveRules(ContainerBuilder builder)  
  35.         {  
  36.             builder.RegisterType<StudentRepository>().As<IStudentRepository>();  
  37.         }  
  38.     }  

2、現在在你的MVC程序中注入依賴代碼就ok了

(1)首先聲明一個Student學生類

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5.  
  6. namespace AtuoFacOfMVC4.Models  
  7. {  
  8.     public class Student  
  9.     {  
  10.         public int Id { get; set; }  
  11.         public string Name { get; set; }  
  12.         public string Graduation { get; set; }  
  13.         public string School { get; set; }  
  14.         public string Major { get; set; }  
  15.     }  
  16. }  

(2)然后聲明倉儲接口及其實現

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.  
  6. namespace AtuoFacOfMVC4.Models  
  7. {  
  8.     public interface IStudentRepository  
  9.     {  
  10.         IEnumerable<Student> GetAll();  
  11.         Student Get(int id);  
  12.         Student Add(Student item);  
  13.         bool Update(Student item);  
  14.         bool Delete(int id);  
  15.     }  
  16. }  
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5.  
  6. namespace AtuoFacOfMVC4.Models  
  7. {  
  8.     public class StudentRepository : IStudentRepository  
  9.     {  
  10.         private List<Student> Articles = new List<Student>();  
  11.  
  12.         public StudentRepository()  
  13.         {  
  14.             //添加演示數據  
  15.             Add(new Student { Id = 1, Name = "張三", Major = "軟件工程", Graduation = "2013年", School = "西安工業大學" });  
  16.             Add(new Student { Id = 2, Name = "李四", Major = "計算機科學與技術", Graduation = "2013年", School = "西安工業大學" });  
  17.             Add(new Student { Id = 3, Name = "王五", Major = "自動化", Graduation = "2013年", School = "西安工業大學" });  
  18.         }  
  19.         /// <summary>  
  20.         /// 獲取全部學生信息  
  21.         /// </summary>  
  22.         /// <returns></returns>  
  23.         public IEnumerable<Student> GetAll()  
  24.         {  
  25.             return Articles;  
  26.         }  
  27.         /// <summary>  
  28.         /// 通過ID獲取學生信息  
  29.         /// </summary>  
  30.         /// <param name="id"></param>  
  31.         /// <returns></returns>  
  32.         public Student Get(int id)  
  33.         {  
  34.             return Articles.Find(p => p.Id == id);  
  35.         }  
  36.         /// <summary>  
  37.         /// 添加學生信息  
  38.         /// </summary>  
  39.         /// <param name="item"></param>  
  40.         /// <returns></returns>  
  41.         public Student Add(Student item)  
  42.         {  
  43.             if (item == null)  
  44.             {  
  45.                 throw new ArgumentNullException("item");  
  46.             }  
  47.             Articles.Add(item);  
  48.             return item;  
  49.         }  
  50.         /// <summary>  
  51.         /// 更新學生信息  
  52.         /// </summary>  
  53.         /// <param name="item"></param>  
  54.         /// <returns></returns>  
  55.         public bool Update(Student item)  
  56.         {  
  57.             if (item == null)  
  58.             {  
  59.                 throw new ArgumentNullException("item");  
  60.             }  
  61.  
  62.             int index = Articles.FindIndex(p => p.Id == item.Id);  
  63.             if (index == -1)  
  64.             {  
  65.                 return false;  
  66.             }  
  67.             Articles.RemoveAt(index);  
  68.             Articles.Add(item);  
  69.             return true;  
  70.         }  
  71.         /// <summary>  
  72.         /// 刪除學生信息  
  73.         /// </summary>  
  74.         /// <param name="id"></param>  
  75.         /// <returns></returns>  
  76.         public bool Delete(int id)  
  77.         {  
  78.             Articles.RemoveAll(p => p.Id == id);  
  79.             return true;  
  80.         }  
  81.     }  

(3)最后添加控制器StudentController,并注入依賴代碼

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using System.Web.Mvc;  
  6. using AtuoFacOfMVC4.Models;  
  7.  
  8. namespace AtuoFacOfMVC4.Controllers  
  9. {  
  10.     public class StudentController : Controller  
  11.     {  
  12.         readonly IStudentRepository repository;  
  13.         //構造器注入  
  14.         public StudentController(IStudentRepository repository)  
  15.         {  
  16.             this.repository = repository;  
  17.         }  
  18.  
  19.         public ActionResult Index()  
  20.         {  
  21.             var data = repository.GetAll();  
  22.             return View(data);  
  23.         }  
  24.  
  25.     }  

(4)最后為控制器StudentController的Index方法添加視圖即可,這里不再詳述,運行效果如下

*將自己學習的點滴記錄并分享出來,既能使自己得到成長,偶爾也能幫助一下別人,何樂而不為呢?如果這篇文章對你還有點用的話,希望幫忙推薦一下~

原文鏈接:http://www.cnblogs.com/WeiGe/p/3871451.html

責任編輯:林師授 來源: 王威的博客
相關推薦

2010-06-23 15:44:03

ASP.NET MVC

2010-06-25 08:51:46

ASP.NET MVC

2009-07-31 12:43:59

ASP.NET MVC

2009-07-24 13:20:44

MVC框架ASP.NET

2011-08-24 09:43:06

ASP.NET MVC

2012-05-09 13:29:42

ASP.NET

2009-07-28 17:17:19

ASP.NET概述

2009-07-22 10:09:59

ASP.NET MVC

2009-07-23 15:44:39

ASP.NET MVC

2009-07-23 14:31:20

ASP.NET MVC

2009-07-22 13:24:24

ASP.NET MVC

2009-07-20 10:53:59

ASP.NET MVC

2009-07-20 16:44:56

ASP.NET MVCIValueProvi

2009-07-30 13:45:40

ASP.NET開發模式MVC模式

2010-10-18 09:03:44

ASP.NET MVC

2010-06-23 08:56:58

ASP.NET MVC

2014-06-30 15:10:32

2009-04-01 12:00:43

ASP.NETMVC

2009-07-22 10:13:31

異步ActionASP.NET MVC

2009-07-20 15:44:32

ASP.NET MVC
點贊
收藏

51CTO技術棧公眾號

99国产精品99久久久久久| 热三久草你在线| 狠狠色丁香婷婷综合| 久久综合九色九九| 国产人妻精品午夜福利免费| 阿v视频在线| 久久影院午夜片一区| 国产欧美va欧美va香蕉在| 欧美激情精品久久| 亚洲成人一品| 日韩欧美一区在线| 男人操女人免费软件| 欧美日韩xx| 91在线小视频| 91精品视频免费观看| 欧美亚韩一区二区三区| 日韩欧美精品| 亚洲国产成人精品久久久国产成人一区| 成人一区二区三| 国产美女一区视频| 亚洲欧洲国产专区| 欧美日韩在线精品| 日本黄色三级视频| 国产一区二区三区四区五区美女| 国产91色在线| 日本三级黄色大片| 天天综合久久| 亚洲天堂网在线观看| 欧美体内she精高潮| 91九色综合| 亚洲成人福利片| 国产又黄又爽免费视频| 福利成人在线观看| 99麻豆久久久国产精品免费| 亚洲综合色av| 亚洲一区 中文字幕| 欧美一级播放| 久久久之久亚州精品露出| 一区二区国产精品精华液| 欧美熟乱15p| 亚洲精品自拍视频| 日本少妇xxx| 婷婷久久综合九色综合99蜜桃| 色综合久久88色综合天天6| www.日本在线视频| 天堂av最新在线| 亚洲人成亚洲人成在线观看图片 | 波多野结衣小视频| 国产欧美在线| 国语对白做受69| 久久机热这里只有精品| 牛夜精品久久久久久久99黑人| 色偷偷偷亚洲综合网另类 | 亚洲日本电影在线| 亚洲午夜精品国产| 成人高清免费在线播放| 久久综合五月天婷婷伊人| 国产日韩亚洲精品| 人妻一区二区三区| 91在线视频18| 久久精品中文字幕一区二区三区| 天天操天天干天天操| 99久久久无码国产精品| 国产主播一区二区三区四区| 婷婷五月综合久久中文字幕| 99视频一区二区三区| 久久久婷婷一区二区三区不卡| 天堂在线视频免费| 久久久久久毛片| 日韩一区二区三区高清| av电影在线观看一区二区三区| 国产精品乱码妇女bbbb| 潘金莲一级淫片aaaaaa播放1| gogo在线观看| 婷婷综合五月天| 精品视频一区二区在线| abab456成人免费网址| 7777精品伊人久久久大香线蕉的 | 免费无码国产v片在线观看| 在线中文字幕播放| 欧美在线观看一区| 91亚洲一区二区| 第四色中文综合网| 亚洲美女在线观看| 亚洲伦理一区二区三区| 黄色欧美成人| 国产精品v片在线观看不卡| 在线观看免费观看在线| 国产成人午夜电影网| 精品视频导航| 男人天堂久久久| 亚洲综合色在线| 妞干网在线免费视频| 高清精品久久| 国产午夜精品久久久| 欧美a级片免费看| 在线日韩中文| 国产精品美女主播| 亚洲精品无amm毛片| 国产欧美日韩亚州综合| 天天想你在线观看完整版电影免费 | 99在线视频精品| 在线一区高清| 九色porny丨入口在线| 欧美日韩一区二区三区不卡| 中文字幕视频观看| 色婷婷热久久| 奇门遁甲1982国语版免费观看高清| 在线观看视频二区| 91香蕉国产在线观看软件| 欧美少妇在线观看| av在线一区不卡| 精品国产乱码久久久久久闺蜜 | 国产精品成人免费电影| 成人av无码一区二区三区| 久久久久成人黄色影片| www.日本在线视频| 欧美黄色a视频| 亚洲另类图片色| 国产亚洲欧美久久久久| 麻豆成人av在线| 欧美黑人3p| 波多野结衣中文字幕久久| 91精品国产aⅴ一区二区| 免费看黄色的视频| 国产欧美成人| 国产传媒一区二区三区| 黄色av电影在线观看| 欧洲日韩一区二区三区| 波多野结衣av在线免费观看| 尹人成人综合网| 91精品国自产在线观看| 免费在线观看黄色| 欧美午夜一区二区| 亚洲综合色一区| 国产日韩欧美高清免费| 国产精品三区在线| 日本伦理一区二区| 欧美一二三四在线| 97在线观看免费高| 国产久卡久卡久卡久卡视频精品| 亚洲一区二区三区乱码| 国产一区二区三区四区五区3d| 亚洲欧美日韩直播| 五月婷婷色丁香| 久久亚洲综合色一区二区三区| 久久久久久免费看| 欧洲亚洲一区二区三区| 国内免费久久久久久久久久久| 亚洲福利在线观看视频| 亚洲资源在线观看| 国产日韩视频一区| 亚洲神马久久| 欧美精品123| 深夜视频一区二区| 中文日韩电影网站| 91片黄在线观看喷潮| 日韩理论片中文av| 日韩av影视大全| 欧美三区美女| 国产精品亚洲一区| 天堂在线中文网官网| 日韩精品丝袜在线| 免费视频网站在线观看入口| 亚洲国产激情av| 免费黄频在线观看| 亚洲午夜av| 老司机精品福利在线观看| 日本高清不卡一区二区三区视频| 伊人伊成久久人综合网站 | 欧美精品一区二区三区高清aⅴ| 久久久99精品| 久久综合色之久久综合| 在线观看av网页| 午夜电影亚洲| 久久精品日产第一区二区三区精品版| 日韩av中字| 久久影院免费观看| 天天av天天翘| 欧美日韩免费在线视频| 强乱中文字幕av一区乱码| 成人黄色国产精品网站大全在线免费观看| 日韩av三级在线| 成人免费在线播放| 动漫美女被爆操久久久| 秋霞伦理一区| 久久伊人精品一区二区三区| 亚洲欧美自偷自拍| 欧美日韩另类一区| 久草免费在线观看视频| 久久精品一区二区三区四区| xxxx在线免费观看| 99re国产精品| 在线视频不卡一区二区三区| 婷婷综合一区| 亚洲精品日韩av| a一区二区三区| 九九视频这里只有精品| 黄色在线免费观看大全| 欧美一区二区三区在线视频| 久久精品视频7| 亚洲另类春色国产| 在线观看免费小视频| 成人动漫视频在线| 久久人人爽人人片| 免费成人在线视频观看| 日韩国产一级片| 亚洲成人日韩| 日韩免费中文专区| 乱亲女h秽乱长久久久| 国产精品一区二区三| 亚洲综合电影| 久久久久久久久久亚洲| 婷婷免费在线视频| 日韩精品免费在线| 亚洲精品久久久久久久久久| 欧美老女人第四色| 中文字幕在线播| 亚洲成国产人片在线观看| 亚洲精品一区二区三区在线播放| 91理论电影在线观看| 中文字幕18页| 国产精品亚洲视频| 一级做a免费视频| 日韩在线一区二区三区| 久久综合九色综合88i| 欧美体内she精视频在线观看| 一区二区三区在线视频看| 免费精品国产| 久久国产精品免费一区| 哺乳挤奶一区二区三区免费看| 91在线色戒在线| 亚洲ww精品| 成人国产精品日本在线| 99久久久国产精品免费调教网站| 啪一啪鲁一鲁2019在线视频| 少妇淫片在线影院| 91av在线国产| www.综合网.com| 欧美黑人性视频| 日本在线视频网址| 欧美激情视频一区二区| 天天干在线视频论坛| 欧美黑人巨大xxx极品| 日本中文字幕中出在线| 久久久久久国产精品久久| 男男gaygays亚洲| 欧美大片免费看| heyzo高清在线| 97精品久久久| 亚洲插插视频| 国产成人精品一区二区三区| 亚洲人免费短视频| 国产欧美日韩视频| 久久精品免视看国产成人| 91福利视频导航| 日本在线视频一区二区三区| 国产精品大全| 欧美综合自拍| 日韩av一区二区三区在线| 色婷婷色综合| 国产日韩欧美大片| 亚洲国产精品第一区二区| 5月婷婷6月丁香| 日韩精品一区第一页| 国产福利在线免费| 国产成人自拍在线| 免费无码一区二区三区| 国产日本欧美一区二区| 色哟哟一一国产精品| 亚洲综合久久久| 91九色丨porny丨肉丝| 欧美性大战久久久久久久| 国产又粗又猛又爽| 亚洲成av人乱码色午夜| 欧洲一区av| www.欧美免费| 国产夫妻在线| 国产精品视频大全| 高潮久久久久久久久久久久久久| 久久精品国产精品青草色艺| 第一社区sis001原创亚洲| 视色,视色影院,视色影库,视色网| 日韩视频不卡| 色国产在线视频| 国产成人午夜精品5599| 久久久久无码精品国产sm果冻 | 成人性生交大合| 无码一区二区三区在线| 亚洲丝袜另类动漫二区| 国产女同在线观看| 欧美日韩国产中文| 亚洲欧美国产高清va在线播放| 亚洲欧美制服第一页| 亚洲精品天堂| 国产精品成人国产乱一区| 99re6热只有精品免费观看| 日本一区二区高清视频| 欧美日韩日本国产亚洲在线| 激情六月丁香婷婷| 国产成人精品一区二区三区四区 | 最近中文字幕无免费| 中文字幕制服丝袜成人av| 日韩在线视频免费播放| 日韩欧美二区三区| 91大神xh98hx在线播放| 91av视频在线| 中文字幕一区二区三区日韩精品| 亚洲国产高清国产精品| 夜夜精品视频| 成人做爰69片免费| 成人欧美一区二区三区小说| 国产精品久久久久久人| 亚洲黄色在线看| 在线免费观看的av| 成人黄色免费片| 精品国产乱码久久久久久蜜坠欲下| 夜夜添无码一区二区三区| 精品一二线国产| 亚洲ⅴ国产v天堂a无码二区| 日韩欧美大尺度| 四虎永久在线精品免费网址| 欧美人在线观看| 日韩欧美高清一区二区三区| 在线观看精品视频| 日本特黄久久久高潮| 日韩人妻无码一区二区三区| 午夜精品在线视频一区| 亚洲国产精品久久久久爰性色| 久久精品2019中文字幕| 高清亚洲高清| 手机在线观看国产精品| 久久婷婷亚洲| 亚洲综合网在线观看| 欧美日韩黄色大片| 五月婷婷伊人网| 国内精久久久久久久久久人| 91久久精品无嫩草影院| 黄色一级大片免费| 国产一区二区三区免费看| 日本午夜在线观看| 欧美久久久久久久久久| 麻豆视频网站在线观看| 成人黄色av播放免费| 亚洲最大黄网| 中文字幕 欧美 日韩| 一区二区三区在线免费视频| 国产农村老头老太视频| 欧美精品免费在线观看| 亚洲精品国产九九九| 亚洲精品无码国产| 波多野结衣视频一区| 久久国产视频播放| 亚洲欧美资源在线| 狠狠久久伊人中文字幕| 国产又粗又硬又长| 国产精品自拍av| 久久久久久久国产精品毛片| 亚洲国产中文字幕久久网| 亚洲天堂av在线| 色女孩综合网| 国产一区二区三区综合| 国产亚洲欧美久久久久| 亚洲欧美另类在线观看| 成人在线视频免费| 午夜啪啪福利视频| 国产69精品久久久久毛片| 日韩av电影网| 亚洲午夜国产成人av电影男同| 992tv国产精品成人影院| 国产高潮呻吟久久久| 成人性生交大片免费看中文| 精产国品一区二区| 日韩中文字幕av| 99久久免费精品国产72精品九九| 五十路熟女丰满大屁股| 中文字幕精品三区| 国产色综合视频| 91黑丝高跟在线| 欧美综合在线视频观看| 永久看看免费大片| 狠狠久久亚洲欧美专区| 午夜伦全在线观看| 成人动漫视频在线观看完整版| 一本色道久久精品| 午夜国产小视频| 日韩精品在线观看一区| 六九午夜精品视频| 青青青青草视频| 亚洲婷婷在线视频| 男男激情在线| av免费观看久久| 日韩不卡手机在线v区| 国产亚洲欧美久久久久| 在线观看日韩视频| 欧美18xxxx| 亚洲一区二区偷拍| 色悠久久久久综合欧美99| 在线视频国产区| 一区二区三区四区国产|