精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日韩欧美色视频| 免费一区二区三区| 久久无码精品丰满人妻| 国产精品jk白丝蜜臀av小说| 欧美日韩国产色视频| 亚洲一区免费看| 无码国产精品一区二区色情男同 | av日韩精品| 欧美日韩另类字幕中文| 亚洲v国产v在线观看| www.色日本| 日本美女视频一区二区| 久久久免费在线观看| 91大神福利视频| 亚洲成人一品| 精品国产一区二区三区忘忧草| 日本va中文字幕| 91吃瓜在线观看| 国产人伦精品一区二区| 国产高清自拍99| 91麻豆国产在线| 久久福利精品| 国外视频精品毛片| 天海翼在线视频| 国产欧美日韩| 日韩精品极品在线观看| 免费观看一区二区三区| 亚洲欧洲二区| 91精品福利视频| 国产成人在线免费看| 婷婷在线播放| 亚洲女人的天堂| 一区二区三区欧美成人| 国模吧精品人体gogo| 99视频精品在线| 99国产超薄丝袜足j在线观看 | 亚洲欧美成人一区| 国产三级在线观看| 久久久久久久久久电影| 免费看污久久久| 青青草在线免费观看| k8久久久一区二区三区| 国产高清在线一区二区| 性猛交富婆╳xxx乱大交天津| 奇米综合一区二区三区精品视频| 欧美亚洲日本网站| 一本一道无码中文字幕精品热| 亚洲伦理精品| 97久久精品人人澡人人爽缅北| 久草视频免费播放| 亚洲美女视频在线免费观看| 欧美激情手机在线视频| 激情综合网五月婷婷| 亚洲第一网站| 91成人在线观看国产| 久草国产精品视频| 亚洲在线黄色| 国产精品久久久久久久久借妻| 午夜精品免费观看| 日韩国产欧美三级| 国产女精品视频网站免费| 91国产精品一区| 国产一区二区精品久久| 99porn视频在线| 人妻与黑人一区二区三区| av午夜一区麻豆| 欧美日韩高清在线一区| 成年人免费在线视频| 国产精品视频线看| 日本丰满少妇黄大片在线观看| h片在线播放| 亚洲高清免费视频| 男人亚洲天堂网| 丁香婷婷久久| 日韩亚洲欧美一区二区三区| 久久久无码人妻精品无码| 露出调教综合另类| 一区二区三区精品99久久| 俄罗斯毛片基地| 综合五月婷婷| 欧美一区在线直播| 中日韩在线观看视频| 国产一区二区不卡在线| 国产精品一区二| 成年人视频免费在线观看| 亚洲视频一区在线| 欧美日韩亚洲一| 日韩一区二区三区四区五区| 精品国产麻豆免费人成网站| 男女做爰猛烈刺激| 欧美伊人久久| 国产成人精品av在线| av免费观看在线| 99精品国产视频| 一区二区三区视频| 日产福利视频在线观看| 欧美日韩另类一区| 国产一级二级在线观看| 亚洲精品一区二区在线看| 午夜精品在线视频| 国产精品熟女久久久久久| 91在线一区二区三区| youjizz.com亚洲| 性爽视频在线| 欧美mv和日韩mv的网站| av网在线播放| 99日韩精品| 91一区二区三区| 色视频在线免费观看| 黑人巨大精品欧美一区二区| 97超碰人人看| 日韩电影在线视频| 国产91色在线|免| 懂色av蜜臀av粉嫩av分享吧| 国产精品视频看| 毛片av免费在线观看| 91成人在线精品视频| 日韩在线欧美在线国产在线| av黄色在线播放| 成人av免费观看| 4444在线观看| 伊人久久大香| 在线免费看av不卡| 国产精品视频免费播放| 丁香激情综合五月| 男女h黄动漫啪啪无遮挡软件| 国产成人午夜性a一级毛片| 日韩精品在线免费| 久久露脸国语精品国产91| 国产福利一区二区三区在线视频| 影音先锋欧美资源| 日日夜夜综合| 久久精品成人欧美大片古装| 欧美在线视频精品| 日本一区二区三区四区在线视频| 无码人妻h动漫| 亚洲三级精品| 欧美在线亚洲在线| 性高潮久久久久久久久久| 婷婷久久综合九色国产成人 | 久久久99精品免费观看不卡| 国产视频一视频二| 少妇精品导航| 青青久久av北条麻妃海外网| 头脑特工队2在线播放| 精品国产鲁一鲁一区二区张丽| 亚洲观看黄色网| 一区二区三区四区五区在线| 久久久精品动漫| 国产精欧美一区二区三区蓝颜男同| 亚洲国产一区自拍| 毛片毛片女人毛片毛片| 久久理论电影网| 国产一级特黄a大片免费| 成人在线视频免费观看| 国产精品成人av性教育| 成人综合影院| 7777精品伊人久久久大香线蕉完整版| 成人欧美一区二区三区黑人一| 久久99久久久久久久久久久| 中文字幕一区二区三区四区五区人| 成人97精品毛片免费看| 欧美老女人在线视频| 亚洲精品免费在线观看视频| 午夜欧美一区二区三区在线播放| 成熟妇人a片免费看网站| 日韩一级欧洲| 日韩国产欧美一区| 粉嫩av国产一区二区三区| 久久99久久99精品免观看粉嫩 | 久久久久久不卡| 中文字幕 久热精品 视频在线 | 午夜影院免费在线观看| 中文字幕av一区二区三区高| 国产xxxxhd| 国产手机视频一区二区| 色婷婷精品国产一区二区三区| 日本午夜免费一区二区| 欧美黄色性视频| 激情在线视频| 欧美一区国产二区| 97久久久久久久| 国产精品成人免费在线| 免费黄色a级片| 日韩黄色免费电影| 久久99久久久久久| 第一社区sis001原创亚洲| 91九色在线观看| 成人免费看黄| 欧美成年人在线观看| 天天干天天操av| 欧美酷刑日本凌虐凌虐| 日韩少妇裸体做爰视频| 中文字幕亚洲在| 中文字幕一区二区三区人妻| 久久超碰97中文字幕| 欧美极品欧美精品欧美| 91精品电影| 日本一区二区精品| 国产一区二区三区亚洲| 91精品久久久久久久久久久| 黄色aa久久| 久久精品视频在线观看| 日本精品专区| 精品剧情在线观看| 亚洲综合精品国产一区二区三区 | 美女福利一区| 亚洲一区二区三区视频播放| 欧美电影免费观看网站| 欧美国产视频一区二区| 自拍视频在线免费观看| 日韩经典中文字幕| www.久久伊人| 欧美高清www午色夜在线视频| 美日韩一二三区| 亚洲午夜精品久久久久久久久| 最新av电影网站| 日本一区二区三级电影在线观看| 久久久久久久久免费看无码| 国产福利精品一区| 欧美视频亚洲图片| 蜜乳av一区二区三区| 国模吧无码一区二区三区| 好看的亚洲午夜视频在线| 偷拍盗摄高潮叫床对白清晰| 国产一区2区| 欧美资源一区| 亚洲精品合集| 久久久久欧美| 日韩高清电影免费| 国产色综合一区二区三区| 亚洲视频三区| 粉嫩av免费一区二区三区| 国产欧美日韩电影| 91在线视频九色| av一级久久| 亚洲中国色老太| 国产美女视频一区二区 | 污色网站在线观看| 日韩av一区二区三区四区| 日韩欧美精品在线观看视频| 亚洲一区久久| 人妻无码视频一区二区三区| 久久福利精品| 日本成人中文字幕在线| 七七婷婷婷婷精品国产| 免费看涩涩视频| 精品一区二区三区在线观看国产| 手机免费av片| 国产一区二区三区四| 久久黄色一级视频| 国产sm精品调教视频网站| 午夜福利三级理论电影| 大美女一区二区三区| 亚洲久久久久久| 91美女福利视频| 精品丰满少妇一区二区三区| 国产精品久久久久一区| 国产大片免费看| 亚洲资源中文字幕| 日韩精品久久久久久免费| 日本韩国欧美在线| 91亚洲国产成人久久精品麻豆| 69堂成人精品免费视频| 韩国av在线免费观看| 国产丝袜一区二区三区| 成人精品一区二区| 久久九九热免费视频| 国产极品人妖在线观看| 欧美壮男野外gaytube| 久久久久久一区二区三区四区别墅| 成人av电影天堂| 成人看片爽爽爽| 日韩电影免费观看高清完整| 四虎8848精品成人免费网站| 狠狠精品干练久久久无码中文字幕| 黄色精品免费| 嫩草影院国产精品| 国产激情一区二区三区| 蜜桃传媒一区二区亚洲av| 国产精品福利av| 国产午夜精品一区二区理论影院 | 中文字幕1234区| 成人精品视频一区二区三区 | 少妇高潮久久久| 亚洲天堂网站在线观看视频| 菠萝菠萝蜜在线观看| 青青久久aⅴ北条麻妃| avtt久久| 欧美一区国产一区| 欧美性色综合| www.99av.com| av高清久久久| 精品自拍偷拍视频| 色婷婷亚洲综合| www.国产黄色| 中文字幕日韩精品有码视频| 丁香花高清在线观看完整版| 国产精品久久久久久久9999| 激情小说亚洲图片| 一区二区三区在线观看www| 99这里有精品| 特黄特黄一级片| 久久久久久久电影| 日韩xxx高潮hd| 欧美一区二区三区日韩视频| 成人在线免费看| 午夜精品免费视频| 香蕉免费一区二区三区在线观看| 亚洲v日韩v欧美v综合| 国产日韩高清一区二区三区在线| 红桃视频一区二区三区免费| 中文字幕欧美区| 国产又黄又粗又爽| 亚洲精品动漫久久久久| 亚洲性图自拍| 成人免费淫片aa视频免费| 国产剧情一区| 成人午夜视频免费在线观看| 成人av午夜影院| 国产十六处破外女视频| 欧美日韩精品欧美日韩精品 | 欧美美女操人视频| 欧洲美女精品免费观看视频 | av在线日韩国产精品| 欧美性视频网站| 欧美毛片免费观看| 久久亚洲中文字幕无码| 国产99久久久久久免费看农村| 色欲一区二区三区精品a片| 欧美日韩在线播放一区| 经典三级在线| 国产精品久久97| 成人毛片免费看| 校园春色 亚洲色图| 国产性色一区二区| 无码人妻丰满熟妇精品区| 亚洲精品一区在线观看香蕉| 美女av在线免费看| 蜜桃成人在线| 老司机精品视频网站| 日本xxxxxxxxx18| 欧美性生交xxxxx久久久| 亚洲av成人无码久久精品老人| 2019中文字幕在线免费观看| 日日狠狠久久偷偷综合色| 黄色免费观看视频网站| 91免费视频网址| 日日夜夜狠狠操| 中文字幕国内精品| 成人国产精品| 久久人妻无码一区二区| 国产福利精品一区| 免费在线不卡视频| 亚洲女人天堂色在线7777| 日本久久免费| 亚洲v国产v| 国产精品一区二区三区乱码| 精品少妇theporn| 亚洲精品国产精品乱码不99按摩| 一区二区三区短视频| 日韩久久久久久久久久久久久| 蜜桃视频在线观看一区| 老熟妇高潮一区二区三区| 精品久久久久久久人人人人传媒| av在线网页| 亚洲国产精品久久久久婷婷老年| 狠狠色狠狠色合久久伊人| 久热精品在线观看| 亚洲视频日韩精品| 亚洲天堂网站| 91丨porny丨探花| 久久九九久久九九| 国产ts变态重口人妖hd| 91福利视频网| 99久久精品国产亚洲精品| 91人人澡人人爽| 在线视频欧美精品| 污网站在线免费看| 日韩精彩视频| 国产精品69久久久久水密桃| 国内免费精品视频| 久久中文久久字幕| 天天躁日日躁狠狠躁欧美| 一区二区在线免费看| 亚洲一区在线电影| av中文字幕在线| 精品国产乱码久久久久| 久久97超碰色| 国产又大又黄又粗| 久久中文字幕在线视频| 免费国产自久久久久三四区久久| 一卡二卡三卡四卡五卡| 在线亚洲+欧美+日本专区| 久久av色综合| 做爰高潮hd色即是空| 久久久av毛片精品| 黄频网站在线观看| 成人国产精品一区二区| 美女视频一区免费观看|