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

解讀ASP.NET 5 & MVC6系列(7):依賴注入

移動開發(fā) Android
在前面的章節(jié)(Middleware章節(jié))中,我們提到了依賴注入功能(Dependency Injection),ASP.NET 5正式將依賴注入進行了全功能的實現(xiàn),以便開發(fā)人員能夠開發(fā)更具彈性的組件程序,MVC6也利用了依賴注入的功能重新對Controller和View的服務注入功能進行了重新設計;未來的依賴注入功能還可能提供更多的API,所有如果還沒有開始接觸依賴注入的話,就得好好學一下了。

 在前面的章節(jié)(Middleware章節(jié))中,我們提到了依賴注入功能(Dependency Injection),ASP.NET 5正式將依賴注入進行了全功能的實現(xiàn),以便開發(fā)人員能夠開發(fā)更具彈性的組件程序,MVC6也利用了依賴注入的功能重新對Controller和View的服務注入功能進行了重新設計;未來的依賴注入功能還可能提供更多的API,所有如果還沒有開始接觸依賴注入的話,就得好好學一下了。

在之前版本的依賴注入功能里,依賴注入的入口有MVC中的IControllerFactory和Web API中的IHttpControllerActivator中,在新版ASP.NET5中,依賴注入變成了***層的基礎支撐,MVC、Routing、SignalR、Entity Framrwork等都依賴于依賴注入的IServiceProvider接口,針對該接口微軟給出了默認的實現(xiàn)ServiceProvider,以及Ninject和AutoFac版本的包裝,當然你也可以使用其它第三方的依賴注入容器,如Castle Windsor等;一旦應用了第三方容器,所有的依賴解析都會被路由到該第三方容器上。

針對通用的依賴類型的解析與創(chuàng)建,微軟默認定義了4種類別的生命周期,分別如下:

 

 

類型注冊與示例

依賴注入類型的注冊一般是在程序啟動的入口中,如Startup.cs中的ConfigureServices中,該類的主要目的就是注冊依賴注入的類型。由于依賴注入的主要體現(xiàn)是接口編程,所以本例中,我以接口和實現(xiàn)類的方式來舉例。

首先聲明一個接口ITodoRepository和實現(xiàn)類TodoRepository1,代碼如下:

public interface ITodoRepository
{
    IEnumerable AllItems { get; }     void Add(TodoItem item);     TodoItem GetById(int id);     bool TryDelete(int id); }  public class TodoItem {     public int Id { get; set; }     public string Name { get; set; } }  public class TodoRepository : ITodoRepository {     readonly List _items = new List();      public IEnumerable AllItems     {         get { return _items; }     }      public TodoItem GetById(int id)     {         return _items.FirstOrDefault(x => x.Id == id);     }      public void Add(TodoItem item)     {         item.Id = 1 + _items.Max(x => (int?)x.Id) ?? 0;         _items.Add(item);     }      public bool TryDelete(int id)     {         var item = GetById(id);          if (item == null) { return false; }          _items.Remove(item);          return true;     } }

 

為了演示不同的聲明周期類型,建議多實現(xiàn)幾個類,比如TodoRepository2、TodoRepository3、TodoRepository4等,以便進行演示。然后在ConfigureServices方法內注冊接口ITodoRepository類型和對應的實現(xiàn)類,本例中根據(jù)不同的生命周期注冊了不同的實現(xiàn)類,具體示例如下:

 
  1. //注冊單例模式,整個應用程序周期內ITodoRepository接口的示例都是TodoRepository1的一個單例實例 
  2. services.AddSingleton 

依賴注入的在MVC中的使用方式目前有三種,分別是Controller的構造函數(shù)、屬性以及View中的Inject形式。其中構造函數(shù)注入和之前的MVC中的是一樣的,示例代碼如下:

  1. public class TodoController : Controller 
  2.     private readonly ITodoRepository _repository; 
  3.  
  4.     /// 依賴注入框架會自動找到ITodoRepository實現(xiàn)類的示例,賦值給該構造函數(shù) 
  5.     public TodoController(ITodoRepository repository) 
  6.     { 
  7.         _repository = repository; 
  8.     } 
  9.  
  10.     [HttpGet] 
  11.     public IEnumerable GetAll()     {         return _repository.AllItems;  //這里就可以使用該對象了     } } 

屬性注入,則是通過在屬性上加一個[Activate]屬性即可實現(xiàn)自動獲取實例。

  1. public class TodoController : Controller 
  2.     // 依賴注入框架會自動找到ITodoRepository實現(xiàn)類的示例,賦值給該屬性 
  3.     [Activate] 
  4.     public ITodoRepository Repository { get; set; } 
  5.  
  6.     [HttpGet] 
  7.     public IEnumerable GetAll()     {         return Repository.AllItems;     } } 

注意:這種方式,目前只適用于Controller以及子類,不適用于普通類

同時:通過這種方式,你可以獲取到更多的系統(tǒng)實例對象,如ActionContext、HttpContext、HttpRequest、HttpResponse、 ViewDataDictionary、以及ActionBindingContext。在視圖中,則可以通過@inject關鍵字來實現(xiàn)注入類型的實例提取,示例如下:

  1. @using WebApplication1 
  2. @inject ITodoRepository repository 
  3. @repository.AllItems.Count() 

 

 

而最一般的使用方式,則是獲取IServiceProvider的實例,獲取該IServiceProvider實例的方式目前有如下幾種(但范圍不同):

  1. var provider1 = this.Request.HttpContext.ApplicationServices; 當前應用程序里注冊的Service 
  2. var provider2 = Context.RequestServices;  // Controller中,當前請求作用域內注冊的Service 
  3. var provider3 = Resolver; //Controller中 

然后通過GetService和GetRequiredService方法來獲取指定類型的實例,示例如下:

var _repository1 = provider1.GetService(typeof(ITodoRepository));
var _repository2 = provider1.GetService();//等價形式 //上述2個對象可能為空  var _repository3 = provider1.GetRequiredService(typeof(ITodoRepository)); var _repository4 = provider1.GetRequiredService();//等價形式 //上述2個對象肯定不為空,因為如果為空的話,會自動拋異常出來

 

普通類的依賴注入

在新版的ASP.NET5中,不僅支持上面我們所說的接口類的依賴注入,還支持普通的類型的依賴注入,比如我們生命一個普通類,示例如下:

  1. public class AppSettings 
  2.     public string SiteTitle { get; set; } 

上述普通類要保證有無參數(shù)構造函數(shù),那么注冊的用法,就應該像如下這樣:

  1. services.Configure(app => {     app.SiteTitle = "111"; }); 

使用的時候,則需要獲取IOptions類型的實例,然后其Options屬性即是AppSettings的實例,代碼如下:

  1. var appSettings = app.ApplicationServices.GetRequiredService 

 

當然,我們也可以在視圖中,使用@inject語法來獲取實例,示例代碼如下:

  1. @inject IOptions<AppSettings> AppSettings 
  2. <title>@AppSettings.Options.SiteTitle</title> 

 

基于Scope生命周期的依賴注入

普通的Scope依賴注入

基于Scope作用域的實例在創(chuàng)建的時候需要先創(chuàng)建作用域,然后在該作用域內再獲取特定的實例,我們看看一個示例并對其進行驗證。首先,注冊依賴注入類型,代碼如下:

services.AddScoped

 

然后創(chuàng)建作用域,并在該作用域內獲取實例:

var serviceProvider = Resolver;

var scopeFactory = serviceProvider.GetService(); //獲取Scope工廠類 using (var scope = scopeFactory.CreateScope())  // 創(chuàng)建一個Scope作用域 {     var containerScopedService = serviceProvider.GetService();  //獲取普通的實例     var scopedService1 = scope.ServiceProvider.GetService(); //獲取當前Scope的實例     Thread.Sleep(200);     var scopedService2 = scope.ServiceProvider.GetService(); //獲取當前Scope的實例      Console.WriteLine(containerScopedService == scopedService1); // 輸出:False     Console.WriteLine(scopedService1 == scopedService2); //輸出:True }

 

另外,Scope也可以進行嵌套,嵌套的內外作用域所獲取的實例也是不相同的,實例代碼如下:

var serviceProvider = Resolver;

var outerScopeFactory = serviceProvider.GetService(); using (var outerScope = outerScopeFactory.CreateScope()) //外部Scope作用域 {     var innerScopeFactory = outerScope.ServiceProvider.GetService();     using (var innerScope = innerScopeFactory.CreateScope()) //內部Scope作用域     {         var outerScopedService = outerScope.ServiceProvider.GetService();         var innerScopedService = innerScope.ServiceProvider.GetService();          Console.WriteLine(outerScopedService == innerScopedService); // 輸出:False     } }

 

基于HTTP請求的Scope依賴注入

在之前很多流行的DI容器中,針對每個請求,在該請求作用域內保留一個單實例對象是很流行的,也就是在每次請求期間一個類型的對象實例只會創(chuàng)建一次,這樣可以大大提高性能。

在ASP.NET5中,基于HTTP請求的Scope依賴注入是通過一個ContainerMiddleware來實現(xiàn)的,調用該Middleware時,會創(chuàng)建一個限定作用域的DI容器,用于替換當前請求中已有的默認DI容器。在該管線中,所有后續(xù)的Middleware都會使用這個新的DI容器,在請求走完整個Pipeline管線以后,該ContainerMiddleware的作用就結束了,此時作用域會被銷毀,并且在該作用域內創(chuàng)建的實例對象也都會銷毀釋放。

ContainerMiddleware的時序圖如下所示:

具體的使用方式如下:

  1. app.Use(new Func 

普通類的依賴注入處理

目前普通類的依賴注入,只支持構造函數(shù),比如我們定于一個TestService類,代碼如下:

  1. public class TestService 
  2.     private ITodoRepository _repository; 
  3.     public TestService(ITodoRepository r) 
  4.     { 
  5.         _repository = r; 
  6.     } 
  7.  
  8.     public void Show() 
  9.     { 
  10.         Console.WriteLine(_repository.AllItems); 
  11.     } 

通過在構造函數(shù)里傳入ITodoRepository類的參數(shù)來使用該實例,使用的時候需要先將該類注冊到DI容器中,代碼如下:

  1. services.AddScoped 

然后調用如下語句即可使用:

  1. var service = serviceProvider.GetRequiredService(); 

另外,需要注意,在目前的情況下,不能使用[Activate]來使用依賴注入功能,比如,如下代碼在獲取TestService2實例的過程中會出現(xiàn)錯誤:

  1. public class TestService2 
  2.     [Activate] 
  3.     public ITodoRepository Repository { get; set; } 
  4.     public void Show() 
  5.     { 
  6.         Console.WriteLine(Repository.AllItems); 
  7.     } 

普通類中獲取HttpContext實例

在MVC6中,我們沒辦法通過HttpContent.Current來獲取上下文對象了,所以在普通類中使用的時候就會出問題,要想在普通類中使用該上下文對象,需要通過依賴注入來獲取HttpContext實例,微軟在ASP.NET5中,提供了IHttpContextAccessor接口用于獲取該上下文對象。也就是說,我們可以將該類型的參數(shù)放在構造函數(shù)中,以獲取上下文實例,代碼如下:

  1. public class TestService3 
  2.     private IHttpContextAccessor _httpContextAccessor; 
  3.     public TestService3(IHttpContextAccessor httpContextAccessor) 
  4.     { 
  5.         _httpContextAccessor = httpContextAccessor; 
  6.     } 
  7.  
  8.     public void Show() 
  9.     { 
  10.         var httpContext = _httpContextAccessor.HttpContext;//獲取上下文對象實例 
  11.         Console.WriteLine(httpContext.Request.Host.Value); 
  12.     } 

而使用的時候,則直接通過如下語句就可以了,代碼如下:

  1. var service = serviceProvider.GetRequiredService(); service.Show(); 

提示:普通類的構造函數(shù)中,可以傳入多個DI容器支持的數(shù)據(jù)類似作為參數(shù)。

使用第三方DI容器

目前,.NETCore不支持,只能在全功能版的.NET framework上才能使用,所以使用的時候需要注意一下。第三方DI容器的替換通常是在Startup.cs的Configure方法中進行的,在方法的開始處進行替換,以便后續(xù)的Middleware會使用相關的依賴注入功能。

首先要引入第三方的容器,以Autofac為例,引入Microsoft.Framework.DependencyInjection.Autofac,然后加入如下示例中的替換代碼即可:

  1. app.UseServices(services => 
  2.     services.AddMvc();// AddMvc要在這里注冊 
  3.     var builder = new ContainerBuilder();// 構造容器構建類 
  4.     builder.Populate(services);//將現(xiàn)有的Services路由到Autofac的管理集合中 
  5.     IContainer container = builder.Build(); 
  6.     return container.Resolve();//返回AutoFac實現(xiàn)的IServiceProvider }); 

注意,使用上述方法的時候,要把Mvc的注冊代碼services.AddMvc();必須要從ConfigureServices中挪到該表達式內,否則會報異常,等待微軟解決。另外,還有一個方式,微軟目前的實例項目中還沒有公開,通過分析一些代碼,我們可以發(fā)現(xiàn),在Microsoft.AspNet.Hosting程序中的StartupLoader.cs負責程序入口點的執(zhí)行,在該文件中,我們知道首先是調用Startup.cs中的ConfigureServices方法,然后再調用Configure方法;我們可以看到示例中的ConfigureServices的返回值是void類型的,但在源碼分析中發(fā)現(xiàn),在根據(jù)約定解析ConfigureServices方法的時候,其首先判斷有沒有返回類型是IServiceProvider的,如果有則執(zhí)行該方法,用使用該返回中返回的新IServiceProvider實例;沒有的話,再繼續(xù)查找void類型的ConfigureServices方法。所以,我們可以通過這種方式,來替換第三方的DI容器,實例代碼如下:

// 需要先刪除void類型的ConfigureServices方法
public IServiceProvider ConfigureServices(IServiceCollection services)
{
    var builder = new ContainerBuilder();  // 構造容器構建類
    builder.Populate(services);  //將現(xiàn)有的Services路由到Autofac的管理集合中
    IContainer container = builder.Build();
    return container.Resolve(); //返回AutoFac實現(xiàn)的IServiceProvider }

 

這樣,你就可以像以往一樣,使用Autofac的方式進行依賴類型的管理了,示例如下:

public class AutofacModule : Module
{
    protected override void Load(ContainerBuilder builder)
    {
        builder.Register(c => new Logger())
            .As()             .InstancePerLifetimeScope();          builder.Register(c => new ValuesService(c.Resolve()))             .As()             .InstancePerLifetimeScope();     } }

 

地址:https://github.com/aspnet/Hosting/blob/dev/src/Microsoft.AspNet.Hosting/Startup/StartupLoader.cs

另外一個關于Autofac集成的案例:http://alexmg.com/autofac-4-0-alpha-1-for-asp-net-5-0-beta-3/

***實踐

在使用依賴注入的的時候,我們應該遵守如下***實踐。

做任何事情之前,務必在程序入口點提前注冊所有的依賴類型。

避免直接使用IServiceProvider接口,相反,在構造函數(shù)里顯式添加需要依賴的類型即可,讓依賴注入引擎自己來解析實例,一旦依賴很難管理的話,就使用抽象工廠。

基于接口進行編程,而不是基于實現(xiàn)進行編程。

參考1:http://social.technet.microsoft.com/wiki/contents/articles/28875.dependency-injection-in-asp-net-vnext.aspx

參考2:http://blogs.msdn.com/b/webdev/archive/2014/06/17/dependency-injection-in-asp-net-vnext.aspx

責任編輯:chenqingxiang 來源: 湯姆大叔的博客
相關推薦

2015-06-18 16:29:14

ASP.NET

2015-06-17 14:42:04

ASP.NET

2015-06-29 10:00:02

ASP.NETMVC6

2015-06-18 16:39:17

ASP.NET

2015-06-18 14:13:36

ASP.NET

2015-06-18 17:04:22

ASP.NET

2015-06-16 15:01:59

ASP.NET 5

2015-06-17 16:45:28

ASP.NET

2015-06-17 17:01:48

ASP.NET

2015-06-17 16:04:36

ASP.NET

2015-06-17 10:16:30

ASP.NET

2015-06-18 17:37:19

ASP.NET

2015-06-17 14:09:36

ASP.NET

2015-06-17 14:16:50

ASP.NET

2015-06-17 14:18:50

ASP.NET

2015-06-18 17:34:25

ASP.NET

2015-06-18 14:25:56

ASP.NET

2014-08-26 09:22:40

ASP.NET MVCRouting

2010-10-14 09:05:36

ASP.NET MVC

2009-07-28 15:03:02

依賴性注入
點贊
收藏

51CTO技術棧公眾號

国产一区二区三区精品在线| 日韩专区第三页| 欧美成人一区二区视频| 国产精品久久久久蜜臀| 欧美一区二区视频免费观看| 欧美一级视频免费看| 亚洲美女少妇无套啪啪呻吟| 久久国产综合精品| 欧美老女人在线视频| 精品国产一区在线| 日韩网站中文字幕| 又紧又大又爽精品一区二区| 国新精品乱码一区二区三区18| 精品视频站长推荐| 精品成人免费一区二区在线播放| 国产精品丝袜xxxxxxx| 欧美日韩亚洲国产一区| 制服丝袜综合日韩欧美| www.黄色片| 久热精品视频| 欧美黑人巨大xxx极品| 国产黄色网址在线观看| 日韩三级久久| 欧美人牲a欧美精品| 欧美日韩一级二级三级| 亚洲人高潮女人毛茸茸| 男人女人拔萝卜视频| 日韩成人动漫| 亚洲图片欧美一区| 中文字幕欧美人与畜| 久久精品a一级国产免视看成人| 国产综合视频| 日韩中文字幕在线看| 人妻熟女aⅴ一区二区三区汇编| www在线观看黄色| 国产精品网站一区| 久久精品女人的天堂av| 蜜桃视频久久一区免费观看入口| 亚洲激情亚洲| 久久中文字幕在线视频| 亚洲第一视频区| 一区二区美女| 亚洲精品av在线| 亚洲国产精品狼友在线观看| 精品国产一级| 337p亚洲精品色噜噜噜| 污色网站在线观看| www.成人影院| 欧美日韩一区二区精品| 777av视频| 国模雨婷捆绑高清在线| 一区二区三区四区高清精品免费观看| 国产精品一区二区欧美| 国产绳艺sm调教室论坛| 国内精品视频666| 91精品国产综合久久香蕉的用户体验 | 日韩精品每日更新| 青草青草久热精品视频在线网站 | 疯狂蹂躏欧美一区二区精品| 永久免费看av| av中文字幕在线播放| 亚洲啪啪综合av一区二区三区| 精品亚洲一区二区三区四区五区高| 中文字幕在线看人| 久久精品一区二区国产| 欧美在线视频免费| 69国产精品视频免费观看| 亚洲女优在线| 国产精品高潮在线| 真实的国产乱xxxx在线91| 美国毛片一区二区| 成人欧美一区二区三区黑人孕妇| 亚洲午夜18毛片在线看| 久久久国产亚洲精品| 国产精品白嫩美女在线观看| 自拍偷拍第八页| 韩国成人福利片在线播放| 亚洲在线免费看| 亚洲国产视频一区二区三区| 99精品视频在线观看| 欧美一卡2卡3卡4卡无卡免费观看水多多| 日韩国产成人在线| 蜜臀a∨国产成人精品| 国产日韩欧美成人| 亚洲大尺度网站| 99re热这里只有精品免费视频| 亚洲japanese制服美女| 免费国产精品视频| 久久老女人爱爱| 在线播放 亚洲| av男人的天堂在线观看| 好吊成人免视频| 99热这里只有精品在线播放| 北岛玲精品视频在线观看| 精品日韩一区二区| 久久亚洲无码视频| 欧美午夜一区| 国产精品成熟老女人| 成 人 黄 色 片 在线播放| xfplay精品久久| 成人高清dvd| 欧美色999| 日韩欧美亚洲国产精品字幕久久久| 色啦啦av综合| 欧美成人午夜77777| 日韩在线观看免费av| 色婷婷av国产精品| 国内精品久久久久影院薰衣草 | 久久综合999| eeuss中文| 欧美大胆成人| 精品少妇一区二区| av在线免费播放网址| 亚洲精品社区| 成人午夜高潮视频| 免费理论片在线观看播放老| 亚洲已满18点击进入久久| 国内自拍视频一区| 欧美aaaaa级| 理论片日本一区| 日韩精品久久久久 | 天堂久久av| 在线观看欧美成人| 国产网址在线观看| 国内精品在线播放| 日本不卡一区| 天堂√8在线中文| 精品人伦一区二区色婷婷| 亚洲欧美精品久久| 日韩中文字幕不卡| 麻豆久久久9性大片| 美女精品导航| 日韩一级片网站| 成人午夜免费影院| 天使萌一区二区三区免费观看| 国产精品高潮粉嫩av| 婷婷开心激情网| 亚洲福利视频导航| 亚洲AV成人精品| 伊人色**天天综合婷婷| 国产精品女视频| 番号集在线观看| 色一情一伦一子一伦一区| 激情综合丁香五月| 99精品久久久| 精品一区二区久久久久久久网站| 国产黄色在线| 色哟哟精品一区| 香蕉视频黄色在线观看| 亚洲制服少妇| 欧美日韩另类丝袜其他| 成人性生交大片免费网站| 日韩精品视频在线观看免费| 日本道在线观看| 2021国产精品久久精品| 久久久噜噜噜www成人网| 欧美挤奶吃奶水xxxxx| 18久久久久久| 免费看男男www网站入口在线| 国产精品超碰97尤物18| 亚洲一级片免费| 欧美成人直播| 成人精品久久av网站| 成人黄色在线电影| 日韩欧美国产1| 国产污视频在线看| 成人h动漫精品| 国产 福利 在线| 国产欧美一区| 91夜夜揉人人捏人人添红杏| 99在线播放| 亚洲成人激情在线| 久久免费激情视频| 中文在线一区二区| 91热视频在线观看| 一区福利视频| 欧美日韩国产综合在线| 97久久精品一区二区三区的观看方式| 精品亚洲一区二区三区四区五区| 国产av 一区二区三区| 国产999精品久久| 人妻有码中文字幕| 国产区精品区| 99精品国产高清在线观看| 中文在线а√天堂| 神马国产精品影院av| 性做久久久久久久| 色综合一个色综合亚洲| 四虎884aa成人精品| 成人午夜激情在线| 中文字幕第36页| 国语精品一区| 翔田千里亚洲一二三区| 日韩欧美高清一区二区三区| 日av在线播放中文不卡| 黄色av免费在线| 美腿丝袜一区二区三区| 一区二区三欧美| 午夜久久久久久噜噜噜噜| 色婷婷亚洲精品| 成人在线观看免费完整| 26uuu国产电影一区二区| 6080国产精品| 首页亚洲欧美制服丝腿| 国产 欧美 日韩 一区| 精品日韩免费| 国产亚洲欧美另类一区二区三区| 羞羞视频在线免费国产| 日韩精品极品视频| 成人1区2区3区| 精品视频1区2区3区| 天天操天天爽天天干| 亚洲欧美福利一区二区| xxxx日本黄色| 99在线精品一区二区三区| 91看片破解版| 日韩精品一二三四| av黄色在线网站| 亚洲国产精品一区| 亚洲柠檬福利资源导航| 日韩一级在线免费观看| 国产主播一区| 国内自拍中文字幕| 久久视频在线| 天堂va久久久噜噜噜久久va| 三级精品视频| 国产视频精品网| 日韩视频在线直播| 91亚洲午夜在线| av在线播放一区二区| 国产精品免费在线免费| 香蕉久久免费电影| 欧亚精品中文字幕| 久热在线观看视频| 午夜精品久久17c| 成年人国产在线观看| 欧美精品日韩www.p站| 老司机在线看片网av| 日韩中文综合网| 成av人电影在线观看| 亚洲视频欧美视频| 国产最新视频在线观看| 亚洲视频日韩精品| 爱爱爱免费视频在线观看| 国产网站欧美日韩免费精品在线观看| 日本中文字幕第一页| 精品久久久久久久久久久久久久| 性欧美一区二区| 国产日本欧美一区二区| 五月天综合视频| 久久久久久久久久美女| 国产毛片久久久久久久| 国产欧美日韩视频在线观看| 黄色三级生活片| 国产精品乱人伦中文| 亚洲 欧美 变态 另类 综合| 亚洲欧美日韩国产综合在线| 日韩a级片在线观看| 一区二区激情视频| 久久久久99精品| 欧美日韩免费在线| 免费看一级视频| 欧美欧美欧美欧美首页| 国产精品怡红院| 日韩视频一区二区三区在线播放 | 久久精品老司机| 久久综合久久鬼色中文字| xxxx日本黄色| 亚洲人成电影网站色mp4| 国产精品日日夜夜| 福利一区福利二区微拍刺激| 国产精品露脸视频| 欧美一级片免费看| 刘亦菲久久免费一区二区| 日韩精品视频在线观看网址| 91网在线播放| 九九九热精品免费视频观看网站| 日本在线免费中文字幕| 久精品免费视频| 波多野结衣亚洲| 国产精品免费看久久久香蕉| 日韩在线观看中文字幕| 国产亚洲精品自在久久| 成人在线电影在线观看视频| 美女在线免费视频| 国产精品久久久免费| 色噜噜狠狠一区二区| 国产不卡免费视频| av电影网站在线观看| 一区二区三区四区亚洲| 中文字幕高清在线免费播放| 91麻豆精品91久久久久久清纯| 亚洲一级视频在线观看| 日韩午夜激情视频| 黄色在线网站| 久久久久国产精品一区| 欧美日韩尤物久久| 国产精品久久波多野结衣| 精品少妇av| 国产妇女馒头高清泬20p多| 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产成a人亚洲精v品在线观看| 国产精品久久天天影视| 日韩免费视频播放| 黑人巨大精品欧美一区| 在线免费播放av| 亚洲欧美区自拍先锋| 亚洲婷婷久久综合| 亚洲缚视频在线观看| 国产写真视频在线观看| 国产国语videosex另类| 久久久免费毛片| 成年人视频大全| 美女诱惑一区二区| 蜜桃精品成人影片| 亚洲一区二区三区四区在线免费观看| 精品人妻在线播放| 亚洲综合色婷婷| 一区不卡在线观看| 国产午夜精品一区理论片飘花| 日本在线www| 国产a∨精品一区二区三区不卡| 本网站久久精品| 美女黄毛**国产精品啪啪| 欧美视频官网| 天天色天天干天天色| 国产精品丝袜一区| 无码人妻熟妇av又粗又大 | www.com欧美| 久久久www成人免费精品张筱雨 | 亚洲一区二三区| 国产片在线播放| 色琪琪综合男人的天堂aⅴ视频| 菠萝菠萝蜜在线视频免费观看| 久久久久一本一区二区青青蜜月 | 欧美日韩成人| www.污网站| 最新不卡av在线| 91成人在线免费| 久久天天躁夜夜躁狠狠躁2022| 蜜乳av一区| 97av影视网在线观看| 91精品国产视频| 九九热视频免费| 亚洲免费观看高清完整| 国产欧美一级片| 欧美成人中文字幕在线| 免费观看在线一区二区三区| 50度灰在线观看| 成人做爰69片免费看网站| 久久免费视频6| 亚洲第一视频网| 久久影院午夜精品| 青青草原亚洲| 免费xxxx性欧美18vr| www.xx日本| 日韩欧美一区二区在线视频| 日本在线观看高清完整版| 99re视频在线播放| 伊人久久成人| 久久久久久久久久久久| 欧美色图免费看| 黄色在线免费网站| 国产精品制服诱惑| 亚洲欧美日韩国产综合精品二区 | 国产精品久久久久久久久快鸭 | 欧美日韩免费一区二区三区视频| 高清一区二区三区四区| 午夜精品久久久久久久男人的天堂 | 亚洲免费看黄网站| 国产成a人亚洲精v品无码| 亚洲2020天天堂在线观看| 亚洲成人一品| 福利片一区二区三区| 亚洲影院久久精品| 日韩精品一二| 91香蕉嫩草影院入口| 在线精品在线| 欧美福利在线视频| 精品国一区二区三区| 成人免费看黄| 久久久成人精品一区二区三区 | www亚洲人| 亚洲va电影大全| 亚洲经典三级| 黄色片网站在线播放| 精品国产91乱码一区二区三区| а√天堂在线官网| 精品视频免费观看| 久久国产精品色婷婷| 成年人午夜视频| 日韩在线小视频| 女同另类激情重口| 亚洲免费成人在线视频| 精品欧美激情精品一区| 毛片av在线| 日本免费高清一区二区| 国产91在线观看丝袜| 五月天中文字幕| 97在线视频免费播放|