Autofac在.NetCore 下的使用

摘要:
接口模式开发将用于工作开发的许多领域,这里将使用依赖注入。NetCore目前是独立的,本文添加到Startup中的ConfigureServices方法中。cs,它仅支持Core1publicvoid ConfigureServices(IServiceCollectionservices)2{3services.AddMemoryCache();4services.AddM低于版本3.0

在工作开发中很多地方都会使用到接口模式开发,这里就会用到依赖注入,.NetCore目前是自带的 ,在 Startup.cs中的 ConfigureServices方法中增加 本篇文章仅支持 3.0版本以下core

 1    public void ConfigureServices(IServiceCollection services)
 2         {
 3             services.AddMemoryCache();
 4             services.AddMvc().AddWebApiConventions();
 5             services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
 6             services.Configure<ApiBehaviorOptions>(options =>
 7             {
 8                 options.SuppressConsumesConstraintForFormFileParameters = true;
 9                 options.SuppressInferBindingSourcesForParameters = true;
10                 options.SuppressModelStateInvalidFilter = true;
11             });
12             services.AddMvc().AddJsonOptions(options => { options.SerializerSettings.ContractResolver = new DefaultContractResolver(); });//返回值小写处理
13             services.AddMvc(option => { option.Filters.Add(typeof(SecurityAuthorizeAttribute)); });//添加过滤器
14             services.AddMvc(option => { option.Filters.Add(typeof(GlobalHandlerErrorAttribute)); });//添加过滤器
15             services.AddSingleton<CacheHelper>();
16             services.AddSingleton<IQRCode, RaffQRCode>();
17             services.AddHttpContextAccessor();
18             services.TryAddSingleton<IActionContextAccessor, ActionContextAccessor>();
19         }

这样明显不够方便 Autofac就解决了这一问题,那么下面就看看Autofac在.NetCore中是如何使用的:

     1、首先建立简单的一个基于接口模式的项目.NteCore Mvc模式 引用  Autofac.Extensions.DependencyInjection的引用

     Autofac在.NetCore 下的使用第1张

    2、在 IRepository、IServices、Repository、Services中增加相关代码 所有接口继承自IDependency

   //IRepository
 public interface IBaseRepository<T> : IDependency where T : BaseEntity
    {

        string GetUserName();
    }

//Repository
  public class BaseRepository<T> : IBaseRepository<T> ,IDependency where T : BaseEntity
    {
        public string GetUserName()
        {
            return "just0ne";
        }
    }
//IServices
  public interface IBaseServices<T> : IDependency where T : BaseEntity
    {

        string GetUserName();
    }
//Services
 public class BaseServices<T> : IBaseServices<T> , IDependency where T : BaseEntity
    {
        public readonly IBaseRepository<T> _baseRepository;

        public BaseServices(IBaseRepository<T> baseRepository)
        {
            _baseRepository = baseRepository;
        }

        /// <summary>
        /// 获取一个用户名
        /// </summary>
        /// <returns></returns>
        public string GetUserName()
        {
            return _baseRepository.GetUserName();
        }
    }

    3、Aufofac的加入,这边需要在项目启动Startup中调整 ConfigureServices方法。具体如下

    

 public IServiceProvider ConfigureServices(IServiceCollection services) 
        {
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            services.AddMvc();
            var builder = new ContainerBuilder();//实例化 AutoFac  容器   
            var assemblys = new List<Assembly>();//Service是继承接口的实现方法类库名称
            string assemblysStr = "IRepository^IServices^Repository^Services"; //程序集名称
            foreach (var item in assemblysStr.Split("^"))
            {
                assemblys.Add(Assembly.Load(item));
            }
            var baseType = typeof(IDependency);//IDependency 是一个接口(所有要实现依赖注入的借口都要继承该接口)
            builder.RegisterAssemblyTypes(assemblys.ToArray())
           .Where(m => baseType.IsAssignableFrom(m) && m != baseType)
           .AsImplementedInterfaces().InstancePerLifetimeScope();
            builder.Populate(services);
            return new AutofacServiceProvider(builder.Build());//将系统自带的修改为Atuofac的 重新返回

        }

           控制器层的调用

   Autofac在.NetCore 下的使用第2张

 调用结果:

             Autofac在.NetCore 下的使用第3张

           ok 到此完美结束!

免责声明:文章转载自《Autofac在.NetCore 下的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇day43_MySqlAndroid自动化测试学习路线下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

.NET5.0 Identity认证

一、ASP.NET Core Identity概要  ASP.NET Core Identity的原理可以看ASP.NET Core 之 Identity 入门(一),讲的通俗易懂,这里主要通过示例使用ASP.NET Core Identity。 二、ASP.NET Core  Identity示例 1、创建具有身份验证的 Web 应用 选择 " 文件...

.Net Core使用AspNetCoreRateLimit实现限流

1.添加Nuget程序包  2.在start up中进行配置【有两种模式可选 存储在redis中会哦这内存中】 // 需要从appsettings.json中加载配置 services.AddOptions(); // 存储IP计数器在内存中 services.AddMemo...

原创翻译:蓝牙(BLE)for iOS

About Core Bluetooth 简要:核心蓝牙框架提供了iOS和MAC 应用程序与BLE 设备进行无线通信所需要的类。通过该框架,应用程序可以扫描、发现BLE 外设,如心率、电子温度传感器等等,同时可以与之进行交互。 在OSX 10.9 和iOS6 中,你的mac,iOS 设备还可以扮演外设的角色。    How to Use This Docu...

Window Services的调试和非托管dll的引用及其他一些注意问题

一个asp.net项目,客户提出需求,需要增加即时短信提醒功能;因为项目中使用到GPRS模块做无线通讯,还可以用作发送短信,就用了这个GPRS模块发短信提醒;这个即时短信提醒功能,计划用window services实现;然后修改表结构,开始window services的代码编写。代码编写完成后,开始调试。测试时才发现,window services测试...

在.NET Core 中实现健康检查

.NET Core中提供了开箱即用的运行状况检查,首先,我将在.NET Core API应用程序中执行运行状况检查,接下来,我们将使用DbContext集成SQL Server或数据库的运行状况检查,最后是如何实现自定义服务的运行状况检查。 在ASP.NET Core中实现健康检查 要实现运行状况检查,您需要在项目中安装 Microsoft.AspNet...

BlueTooth作为center使用总结

概述 每个外部蓝牙设备有自己的UUID。 每个蓝牙设备可能有多个server,每个server可能有多个characteristic,每个server和characteristic都有自己的UUID。 建立centerManager myCentralManager = [[CBCentralManager alloc] initWithDelegate:...