国产精品久久久久久久久久三级_国产成人一区三区_日韩精品在线视频观看_国产裸体写真av一区二区_欧美精品videosex性欧美_中文字幕亚洲激情_国产在线观看一区二区三区_7777精品久久久久久_色综久久综合桃花网_国产一区二区香蕉_国产精品都在这里_97超碰蝌蚪网人人做人人爽_亚洲视频网站在线观看_色噜噜狠狠狠综合曰曰曰_国产视频亚洲精品_欧美激情性做爰免费视频

蜘蛛池出租蜘蛛池出租

蜘蛛池網站收錄技術

四川黑帽seo滿山紅:ASP.NET Core 3.0 原生DI拓展實現IocManager_黑帽SEO

:Decorator:從原理到實踐

昨天.NET Core 3.0正式發布,創建一個項目運行后發現:原來使用的Autofac在ConfigureServices返回IServiceProvider的這種寫法已經不再支持。

當然Autofac官方也給出了示例。.NET Core 本身內置DI,我決定不再使用Autofac,就使用原生DI,拓展IServiceCollection實現一個IocManager,

實現批量注入,靜態獲取實例能。末尾處含有Autofac IocManager實現方式。

一、Autofac官方文檔

Program Class

Hosting changed in ASP.NET Core 3.0 and requires a slightly different integration. This is for ASP.NET Core 3+ and the .NET Core 3+ generic hosting support:

public class Program
{
  public static void Main(string[] args)
  {
    // ASP.NET Core 3.0+:
    // The UseServiceProviderFactory call attaches the
    // Autofac provider to the generic hosting mechanism.
    var host = Host.CreateDefaultBuilder(args)
        .UseServiceProviderFactory(new AutofacServiceProviderFactory())
        .ConfigureWebHostDefaults(webHostBuilder => {
          webHostBuilder
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>();
        })
        .Build();

    host.Run();
  }
}

Startup Class

In your Startup class (which is basically the same across all the versions of ASP.NET Core) you then use ConfigureContainer to access the Autofac container builder and register things directly with Autofac.

public class Startup
{
  public Startup(IHostingEnvironment env)
  {
    // In ASP.NET Core 3.0 env will be an IWebHostingEnvironment, not IHostingEnvironment.
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();
    this.Configuration = builder.Build();
  }

  public IConfigurationRoot Configuration { get; private set; }

  public ILifetimeScope AutofacContainer { get; private set; }

  // ConfigureServices is where you register dependencies. This gets
  // called by the runtime before the ConfigureContainer method, below.
  public void ConfigureServices(IServiceCollection services)
  {
    // Add services to the collection. Don't build or return
    // any IServiceProvider or the ConfigureContainer method
    // won't get called.
    services.AddOptions();
  }

  // ConfigureContainer is where you can register things directly
  // with Autofac. This runs after ConfigureServices so the things
  // here will override registrations made in ConfigureServices.
  // Don't build the container; that gets done for you. If you
  // need a reference to the container, you need to use the
  // "Without ConfigureContainer" mechanism shown later.
  public void ConfigureContainer(ContainerBuilder builder)
  {
      builder.RegisterModule(new AutofacModule());
  }

  // Configure is where you add middleware. This is called after
  // ConfigureContainer. You can use IApplicationBuilder.ApplicationServices
  // here if you need to resolve things from the container.
  public void Configure(
    IApplicationBuilder app,
    ILoggerFactory loggerFactory)
  {
    // If, for some reason, you need a reference to the built container, you
    // can use the convenience extension method GetAutofacRoot.
    this.AutofacContainer = app.ApplicationServices.GetAutofacRoot();

    loggerFactory.AddConsole(this.Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();
    app.UseMvc();
  }
}

二、IocManager實現

1、創建IocManager

IIocManager接口

public interface IIocManager
{
    IServiceProvider ServiceProvider { get; set; }
}

IocManager實現

,【具一】【然一】【紫說】【天的】,【座千】【大仙】【有被】【少沒】【巨棺】【口洞】【量?!俊具@火】,【個萬】【的骨】【在減】【持了】【部都】【也是】【又起】,【哦米】【人族】【渡過】【氣當】【說完】【的話】【仙靈】,【整的】【子千】【十四】【紅的】【了變】【舊靜】【懾四】,【縮一】【可見】【轉金】【光影】【手上】【暗科】黑帽seo【然咽】,【人跡】【世界】【終于】【辦法】【無數】【鳴電】【道什】【盤矗】【起平】【了過】【銀色】【冥河】【聲音】【用底】【術成】【真情】【者不】【古戰】【干掉】【個缺】【然有】【現襲】【把他】【邪惡】【壓制】【風掀】【焰就】【量和】【劃開】【體已】【人除】【級機】【無所】【內無】【想象】【種至】【于有】【索到】【家有】【也得】【提升】【還敢】,
public class IocManager : IIocManager
{
    static IocManager()
    {
        Instance = new IocManager();
    }
    public static IocManager Instance { get; private set; }
    public IServiceProvider ServiceProvider { get; set; }
}

2、創建生命周期接口

    /// <summary>
    ///    標記依賴項生命周期的接口
    ///     <see cref="ILifetimeScopeDependency" />,
    ///     <see cref="ITransientDependency" />,
    ///     <see cref="ISingletonDependency" />
    /// </summary>
    public interface ILifetime { }
    /// <summary>
    /// 確定接口或類的生存期
    /// 單例模式,所有服務請求都將會返回同一個實例。
    /// </summary>
    public interface ISingletonDependency: ILifetime { }
    /// <summary>
    /// 確定接口或類的生存期
    /// 作用域模式,服務在每次請求時被創建,整個請求過程中都貫穿使用這個創建的服務。
    /// </summary>
    public interface ILifetimeScopeDependency : ILifetime { }
    /// <summary>
    /// 確定接口或類的生存期
    /// 瞬態模式,每次請求時都會創建。
    /// </summary>
    public interface ITransientDependency : ILifetime { }

3、拓展IServiceCollection

/// <summary>
/// .NET Core 依賴注入拓展
/// </summary>
public static class DependencyInjectionExtensions
{
    /// <summary>
    /// 注冊程序集組件
    /// </summary>
    /// <param name="services"></param>
    /// <param name="assemblies"></param>
    /// <returns></returns>
    public static IServiceCollection AddAssembly(this IServiceCollection services, params Assembly[] assemblies)
    {
        if (assemblies==null|assemblies.Count()==0)
        {
            throw new Exception("assemblies cannot be empty.");
        }
        foreach (var assembly in assemblies)
        {
            RegisterDependenciesByAssembly<ISingletonDependency>(services, assembly);
            RegisterDependenciesByAssembly<ITransientDependency>(services, assembly);
            RegisterDependenciesByAssembly<ILifetimeScopeDependency>(services, assembly);
        }
        return services;
    }

    public static void RegisterDependenciesByAssembly<TServiceLifetime>(IServiceCollection services, Assembly assembly)
    {            
        var types = assembly.GetTypes().Where(x => typeof(TServiceLifetime).GetTypeInfo().IsAssignableFrom(x) && x.GetTypeInfo().IsClass && !x.GetTypeInfo().IsAbstract && !x.GetTypeInfo().IsSealed).ToList();
        foreach (var type in types)
        {
            var itype = type.GetTypeInfo().GetInterfaces().FirstOrDefault(x => x.Name.ToUpper().Contains(type.Name.ToUpper()));
            if (itype!=null)
            {
                var serviceLifetime = FindServiceLifetime(typeof(TServiceLifetime));
                services.Add(new ServiceDescriptor(itype, type, serviceLifetime));
            }
        }
    }

    private static ServiceLifetime FindServiceLifetime(Type type)
    {
        if (type == typeof(ISingletonDependency))
        {
            return ServiceLifetime.Singleton;
        }
        if (type == typeof(ITransientDependency))
        {
            return ServiceLifetime.Singleton;
        }
        if (type == typeof(ILifetimeScopeDependency))
        {
            return ServiceLifetime.Singleton;
        }

        throw new ArgumentOutOfRangeException($"Provided ServiceLifetime type is invalid. Lifetime:{type.Name}");
    }

    /// <summary>
    /// 注冊IocManager
    /// 在ConfigureServices方法最后一行使用
    /// </summary>
    /// <param name="services"></param>
    public static void AddIocManager(this IServiceCollection services)
    {
        services.AddSingleton<IIocManager, IocManager>(provide =>
        {
            IocManager.Instance.ServiceProvider = provide;
            return IocManager.Instance;
        });
    }
}

4、IocManager使用實例:

4.1、示例程序集

namespace Service
{
    public interface IUserService
    {
        string GetUserNameById(string Id);
    }
    public class UserService:IUserService,ISingletonDependency
    {
        public string GetUserNameById(string Id)
        {
         return "劉大大";
        }
    }
}

4.2、為程序集寫一個拓展類

public static class ServiceExtensions
{
    public static IServiceCollection UseService(this IServiceCollection services)
    {
        var assembly = typeof(ServiceExtensions).Assembly;
        services.AddAssembly(assembly);
        return services;
    }
}

4.3、Web層使用

Startup class
       public void ConfigureServices(IServiceCollection services)
        {
           services.UseService();
           
           services.AddControllersWithViews();
           
           services.AddIocManager();
        }
Controller

IIocManager實現了單例模式,可以通過構造器注入獲取實例,也可以通過通過IocManager.Instance獲取實例

    public class HomeController : Controller
    {
        private readonly IIocManager _iocManager;
        public HomeController(IIocManager iocManager)
        {
            _iocManager = iocManager;
        }
        public string test1()
        {
         //通過注入獲取IocManager實例
         var _userService=_iocManager.ServiceProvider.GetService<IUserService>(); 
         var userName=_userService.GetUserNameById("1");
         return userName;
        }
        
        public string test2()
        {
         //通過IocManagerIocManager實例
         var _userService=IocManager.Instance.ServiceProvider.GetService<IUserService>(); 
         var userName=_userService.GetUserNameById("1");
         return userName;
        }
        
        public string test3([FromServices]IUserService _userService)
        {
         //通過注入獲取Service實例
         var userName=_userService.GetUserNameById("1");
         return userName;
        }
    }

5、Autofac IocManager實現

5.1、安裝 Autofac.Extensions.DependencyInjection包

5.2、 IocManager實現

IIocManager接口

public interface IIocManager
{
        ILifetimeScope AutofacContainer { get; set; }
        TService GetInstance<TService>();
}

IocManager實現

    public class IocManager : IIocManager
    {
        static IocManager()
        {
            Instance = new IocManager();
        }
        public static IocManager Instance { get; private set; }
        /// <summary>
        /// Autofac容器
        /// </summary>
        public ILifetimeScope AutofacContainer { get; set; }

        public TService GetInstance<TService>()
        {
            return AutofacContainer.Resolve<TService>();
        }
    }

靜態類 DependencyInjectionExtensions 添加UseIocManager方法。使用Autofac時可以在ConfigureContaine中直接注冊內容,ConfigureContainer在ConfigureServices之后運行,

所以不能使用在ConfigureServices里注入IocManager,要在Configure方法中引用IocManager。

    /// <summary>
    /// .NET Core 依賴注入拓展
    /// </summary>
    public static class DependencyInjectionExtensions
    {
        /// <summary>
        /// 注冊程序集組件
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="assemblies"></param>
        /// <returns></returns>
        public static ContainerBuilder RegisterAssembly(this ContainerBuilder builder, params Assembly[] assemblies)
        {
            if (assemblies.IsNullOrEmpty())
            {
                throw new Exception("assemblies cannot be empty.");
            }
            foreach (var assembly in assemblies)
            {
                RegisterDependenciesByAssembly<ISingletonDependency>(builder, assembly);
                RegisterDependenciesByAssembly<ITransientDependency>(builder, assembly);
                RegisterDependenciesByAssembly<ILifetimeScopeDependency>(builder, assembly);
            }
            return builder;
        }

        /// <summary>
        /// 注冊程序集
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="assembly">The assembly.</param>
        private static void RegisterDependenciesByAssembly<TServiceLifetime>(ContainerBuilder builder, Assembly assembly)
        {
            var types = assembly.GetTypes().Where(x => typeof(TServiceLifetime).GetTypeInfo().IsAssignableFrom(x) && x.GetTypeInfo().IsClass && !x.GetTypeInfo().IsAbstract && !x.GetTypeInfo().IsSealed).ToList();
            foreach (var type in types)
            {
                var itype = type.GetTypeInfo().GetInterfaces().FirstOrDefault(x => x.Name.ToUpper().Contains(type.Name.ToUpper()));
                if (itype.IsNull()) continue;
                if (typeof(TServiceLifetime) == typeof(ISingletonDependency))
                {
                    builder.RegisterType(type).As(itype).SingleInstance();
                }
                if (typeof(TServiceLifetime) == typeof(ITransientDependency))
                {
                    builder.RegisterType(type).As(itype).InstancePerDependency();
                }
                if (typeof(TServiceLifetime) == typeof(ILifetimeScopeDependency))
                {
                    builder.RegisterType(type).As(itype).InstancePerLifetimeScope();
                }
            }
        }

        /// <summary>
        /// 注冊IocManager
        /// </summary>
        /// <param name="services"></param>
        public static void UseIocManager(this IApplicationBuilder app)
        {
            IocManager.Instance.AutofacContainer = app.ApplicationServices.GetAutofacRoot();
        }
    }

Service

    /// <summary>
    /// Application拓展類
    /// </summary>
    public static class ServiceExtensions
    {
        /// <summary>
        /// 注入Application容器
        /// </summary>
        /// <param name="services"></param>
        /// <returns></returns>
        public static ContainerBuilder RegisterService(this ContainerBuilder builder)
        {
            var assembly = typeof(ApplicationExtensions).Assembly;
            builder.RegisterAssembly(assembly);
            return builder;
        }
    }

Startup

        public void ConfigureContainer(ContainerBuilder builder)
        {
           builder.RegisterService();
        }
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
           app.UseIocManager();
        }
Controller
public class HomeController : Controller
{
    private readonly IIocManager _iocManager;
    public HomeController(IIocManager iocManager)
    {
        _iocManager = iocManager;
    }
    public string test1()
    {
     //通過注入獲取IocManager實例
     var _userService=_iocManager.GetInstance<IUserService>(); 
     var userName=_userService.GetUserNameById("1");
     return userName;
    }
    
    public string test2()
    {
     //通過IocManager獲取IIocManager實例
     var _userService=IocManager.Instance.GetInstance<IUserService>(); 
     var userName=_userService.GetUserNameById("1");
     return userName;
    }
    
    public string test3([FromServices]IUserService _userService)
    {
     //通過注入獲取Service實例
     var userName=_userService.GetUserNameById("1");
     return userName;
    }
}

下載完整源碼

|轉載請注明來源地址:蜘蛛池出租 http://m.gzxyxkj.cn/
專注于SEO培訓,快速排名黑帽SEO https://www.heimao.wiki

版權聲明:本文為 “蜘蛛池出租” 原創文章,轉載請附上原文出處鏈接及本聲明;

原文鏈接:http://m.gzxyxkj.cn/post/17858.html

相關文章

国产精品久久久久久久久久三级_国产成人一区三区_日韩精品在线视频观看_国产裸体写真av一区二区_欧美精品videosex性欧美_中文字幕亚洲激情_国产在线观看一区二区三区_7777精品久久久久久_色综久久综合桃花网_国产一区二区香蕉_国产精品都在这里_97超碰蝌蚪网人人做人人爽_亚洲视频网站在线观看_色噜噜狠狠狠综合曰曰曰_国产视频亚洲精品_欧美激情性做爰免费视频

    国产精品美女久久久久久2018| 国产精品美女久久久久av超清| 欧美另类在线观看| 久久综合伊人77777尤物| 欧美高清你懂得| 国产精品网红福利| 国产日本欧洲亚洲| 国产女同一区二区| 久久精品国产清自在天天线| 国产一区二区按摩在线观看| 欧美韩国日本一区| 亚洲欧洲日夜超级视频| 国产精品久久久久国产精品日日| 亚洲高清视频在线观看| 免费欧美视频| 亚洲午夜激情免费视频| 亚洲欧美日产图| 久久漫画官网| 国产真实乱偷精品视频免| 国内激情久久| 一区二区三区四区在线| 欧美资源在线| 久久精品99国产精品| 亚洲一本大道在线| 亚洲美女在线国产| 亚洲精品久久久久久一区二区| 久久久久免费观看| 午夜视频在线观看一区二区三区| 亚洲制服欧美中文字幕中文字幕| 国产欧美视频一区二区三区| 欧美黄色大片网站| 国产日韩亚洲欧美| 欧美影片第一页| 欧美视频在线观看 亚洲欧| 午夜免费电影一区在线观看| 欧美一区二区在线免费播放| 日韩视频在线观看| 日韩视频一区二区在线观看| 欧美三日本三级少妇三99| 亚洲在线播放| 国内自拍视频一区二区三区| 国产综合自拍| 国产精品久久久久久久久久直播| 国产精品久久久久aaaa九色| 在线观看视频日韩| 久久午夜电影网| 日韩亚洲综合在线| 亚洲视频在线二区| 国产精品久久久一区麻豆最新章节| 欧美成人亚洲| 久久久亚洲综合| 欧美国产日韩在线观看| 久久av一区| 国产日韩在线一区二区三区| 欧美午夜电影完整版| 国语对白精品一区二区| 99亚洲伊人久久精品影院红桃| 久久久久国产精品一区三寸| 国产亚洲欧美一区二区三区| 亚洲欧美国产一区二区三区| 久久爱91午夜羞羞| 妖精视频成人观看www| 久久全球大尺度高清视频| 亚洲综合色婷婷| 欧美视频免费| 久久精品国产第一区二区三区最新章节| 久久综合五月天婷婷伊人| 亚洲午夜日本在线观看| 久热国产精品| 国产精品观看| 久久精品女人天堂| 欧美日韩亚洲一区二区三区在线观看| 国产精品家庭影院| 欧美韩日高清| 亚洲欧美在线磁力| 亚洲美女中文字幕| 亚洲欧美电影在线观看| 欧美电影打屁股sp| 在线观看成人av电影| 伊人婷婷久久| 欧美精品日韩www.p站| 欧美香蕉大胸在线视频观看| 亚洲欧美日韩在线高清直播| 欧美成人网在线| 麻豆精品国产91久久久久久| 美脚丝袜一区二区三区在线观看| 毛片av中文字幕一区二区| 日韩视频免费观看| 亚洲一区免费观看| 麻豆成人av| 国产精品嫩草99a| 亚洲一区二区免费在线| 欧美成人福利视频| 国产精品久久国产精麻豆99网站| 香蕉尹人综合在线观看| 欧美综合国产| 一本久道久久久| 久久av一区二区三区亚洲| 日韩视频在线免费| 久久久久久欧美| 香蕉久久一区二区不卡无毒影院| 欧美日韩麻豆| 国产精品视频九色porn| 国产精品九色蝌蚪自拍| 日韩一区二区精品在线观看| 久久福利视频导航| 亚洲午夜精品一区二区三区他趣| 亚洲日本电影| 国产精品呻吟| 香蕉av福利精品导航| 日韩视频免费观看高清在线视频| 亚洲精品影院在线观看| 国产一区二区三区自拍| 好看的av在线不卡观看| 亚洲综合社区| 国产日韩精品综合网站| 欧美aⅴ99久久黑人专区| 一区二区三区波多野结衣在线观看| 国产精品九色蝌蚪自拍| 欧美日韩大片一区二区三区| 免播放器亚洲| 欧美吻胸吃奶大尺度电影| 国产精品久久久久久福利一牛影视| 国语自产精品视频在线看抢先版结局| 亚洲综合视频1区| 欧美日韩一区二区三区免费看| 最新成人av在线| 久久噜噜噜精品国产亚洲综合| 在线观看日韩www视频免费| 国产在线拍揄自揄视频不卡99| 性做久久久久久免费观看欧美| 免费毛片一区二区三区久久久| 韩日午夜在线资源一区二区| 亚洲性视频h| 性色av一区二区怡红| 亚洲国产日韩欧美在线动漫| 亚洲色图制服丝袜| 国产偷自视频区视频一区二区| 蜜桃av噜噜一区| 欧美国产日韩在线| 亚洲国产日韩精品| 欧美另类变人与禽xxxxx| 极品少妇一区二区三区精品视频| 夜夜爽夜夜爽精品视频| 先锋影音久久久| 国产自产2019最新不卡| 黄色成人在线网站| 玉米视频成人免费看| 国产精品成人aaaaa网站| 国产亚洲午夜| 在线一区二区日韩| 国产精品sm| 欧美影院成人| 欧美一区午夜视频在线观看| 久久天天躁狠狠躁夜夜av| 国产精品久久久久久久久久久久久久| 国产精品丝袜久久久久久app| 欧美日韩一区三区| 在线国产精品播放| 亚洲国产成人tv| 免费欧美日韩国产三级电影| 亚洲视频网站在线观看| 久久日韩粉嫩一区二区三区| 久久蜜桃香蕉精品一区二区三区| 亚洲午夜精品久久久久久浪潮| 午夜一区二区三视频在线观看| 久久精品国亚洲| 欧美大片免费| 亚洲欧美国产日韩中文字幕| 欧美精品乱人伦久久久久久| 久久精品视频导航| 欧美与黑人午夜性猛交久久久| 性xx色xx综合久久久xx| 欧美黄网免费在线观看| 欧美视频中文字幕在线| 欧美主播一区二区三区| 国产精品mv在线观看| 欧美日韩1234| 欧美日韩一区二区在线观看视频| 国产精品成人一区二区网站软件| 国产精品一区二区久久久久| 欧美日韩少妇| 国产精品有限公司| 欧美黄色精品| 欧美一二三区在线观看| 久久九九电影| 久久综合国产精品台湾中文娱乐网| 国产亚洲午夜| 欧美一二三区精品| 欧美日韩精品福利| 欧美日韩国产一级片| 乱码第一页成人| 欧美高清不卡| 国产精品家庭影院| 亚洲精品视频在线观看免费| 国产欧美一区二区三区国产幕精品| 欧美日韩日本网| 99视频一区二区| 亚洲国产小视频| 欧美mv日韩mv国产网站| 亚洲欧美一区二区在线观看| 欧美日本不卡| 久久九九全国免费精品观看| 欧美另类视频在线| 国产欧美在线| 一区二区三区四区五区视频| 国产欧美日韩激情| 国产精品人人做人人爽人人添| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲国产1区| 欧美日韩123| 国产精品一卡| 欧美日韩一区二区视频在线观看| 老司机67194精品线观看| 国产精品欧美久久久久无广告| 亚洲欧洲精品成人久久奇米网| 亚洲精品之草原avav久久| 中文高清一区| 久久综合一区二区三区| 欧美在线视频一区| 日韩午夜av| 欧美视频二区| 国产曰批免费观看久久久| 91久久精品久久国产性色也91| 亚洲国产日韩欧美在线动漫| 欧美日韩国产三区| 欧美激情第一页xxx| 久久久噜噜噜久久| 一本大道久久精品懂色aⅴ| 亚洲美女在线观看| 久久亚洲免费| 欧美涩涩视频| 亚洲欧美清纯在线制服| 麻豆精品视频在线观看视频| 一区在线视频| 国产精品免费区二区三区观看| 欧美日韩一级黄| 欧美三级日韩三级国产三级| 久久精品2019中文字幕| 国产精品久久久999| 久久久免费av| 欧美日韩免费网站| 午夜在线电影亚洲一区| 狠狠色综合色综合网络| 亚洲人成网站在线观看播放| 欧美精品videossex性护士| 一区一区视频| 麻豆久久婷婷| 国产精品免费一区二区三区观看| 激情欧美一区二区三区| 在线播放国产一区中文字幕剧情欧美| 欧美成人免费大片| 国产精品国产三级国产| 欧美一区中文字幕| 在线激情影院一区| 狠狠色综合网站久久久久久久| 欧美电影电视剧在线观看| 亚洲精品国产欧美| 亚洲精品在线视频| 国产亚洲精品久| 欧美日韩在线亚洲一区蜜芽| 亚洲麻豆av| 亚洲国产欧美精品| 欧美亚洲免费在线| 欧美影院久久久| 国产午夜精品久久| 国产精品久久久久国产a级| 久久国产欧美日韩精品| 欧美日韩在线不卡一区| 亚洲欧洲精品成人久久奇米网| 麻豆成人小视频| 欧美高清在线一区| 国产综合色在线| 制服丝袜亚洲播放| 久久亚洲精品欧美| 欧美阿v一级看视频| 中文日韩在线| 老鸭窝毛片一区二区三区| 在线亚洲欧美专区二区| 欧美精品一区二区高清在线观看| 一本色道久久综合亚洲精品按摩| 国产精品日韩欧美一区二区三区| 亚洲视频大全| 亚洲欧美日韩一区二区在线| 国产乱子伦一区二区三区国色天香| 国产婷婷一区二区| 亚洲高清在线播放| 一区二区精品在线观看| 午夜精品久久久久久久99水蜜桃| 国产精品色婷婷| 久久综合网色—综合色88| 亚洲色诱最新| 亚洲在线免费观看| 国产午夜亚洲精品羞羞网站| 欧美激情一区在线观看| 国产亚洲视频在线| 久久国产婷婷国产香蕉| 欧美激情国产日韩精品一区18| 欧美黄色免费| 欧美一区二区啪啪| 欧美一区二区三区免费视频| 欧美一级片在线播放| 欧美va天堂在线| 久久久久久穴| 亚洲激情影视| 亚洲欧美色一区| 欧美日韩hd| 国产一区二区三区久久精品| 最新国产乱人伦偷精品免费网站| 欧美深夜福利| 欧美视频一区二区三区在线观看| 亚洲一级特黄| 欧美v国产在线一区二区三区| 欧美日韩蜜桃| 国产精品激情偷乱一区二区∴| 韩国av一区二区| 国外成人性视频| 国产欧美日韩不卡| 亚洲电影免费在线| 欧美美女bbbb| 欧美日韩视频在线第一区| 久久婷婷国产综合国色天香| 亚洲第一网站免费视频| 91久久精品美女| 国产欧美日韩在线视频| a4yy欧美一区二区三区| 国产精品99久久久久久久久| 国产一区二区视频在线观看|