NetCore使用Autofac实现依赖注入

原创 Laughing  2017-08-13 15:14  阅读 135 次 评论 0 条

MVC以及NetCore提供了很多优秀的第三方依赖注入插件,AutofacNetCore下的使用也非常简单。本文针对Autofac的使用进行简单的介绍。

Nuget包安装

Nuget包的安装非常简单,本文不做过多介绍。我们需要安装两个Nuget包

  1. Autofac
  2. Autofac.Extension.DependencyInjection

Autofac使用

ConfigureServices方法默认返回void,如何我们希望使用其他的容器,这需要我们修改ConfigureServices方法,返回IServiceProvider,具体修改方法如下

  1. // This method gets called by the runtime. Use this method to add services to the container.  
  2.        public IServiceProvider ConfigureServices(IServiceCollection services)  
  3.        {  
  4.            // Add framework services.  
  5.            services.AddSession();  
  6.            services.AddMvc();  
  7.            var conn = Configuration.GetSection("ConnectString").GetSection("conn").Value;  
  8.            services.AddDbContext<SysOptionsDbContext>(options => options.UseSqlServer(conn));  
  9.            //services.AddScoped<ISysOptions, SysOptionsRepository>();  
  10.            services.AddDirectoryBrowser();  
  11.            var containerBuilder = new ContainerBuilder();  
  12.            containerBuilder.RegisterModule<DefaultModule>();  
  13.            containerBuilder.Populate(services);  
  14.            var container = containerBuilder.Build();  
  15.            return new AutofacServiceProvider(container);  
  16.        }  


然后,我们增加一个DefaultModule.cs类,完成注册

  1. using System;  
  2. using System.Collections.Immutable;  
  3. using Autofac;  
  4. using PersonLinkCore.WebUI.Repository;  
  5. using PersonLinkCore.WebUI.Repository.IRepository;  
  6.   
  7. namespace PersonLinkCore.WebUI.Middleware  
  8. {  
  9.     public class DefaultModule:Module  
  10.     {  
  11.         protected override void Load(ContainerBuilder containerBuilder)  
  12.         {  
  13.             containerBuilder.RegisterType<SysOptionsRepository>().As<ISysOptions>();  
  14.         }  
  15.     }  
  16. }  

我们可以在HomeController.cs中进行测试

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.IO;  
  4. using System.Linq;  
  5. using System.Reflection.Metadata;  
  6. using System.Runtime.CompilerServices;  
  7. using System.Threading.Tasks;  
  8. using Microsoft.AspNetCore.Hosting.Internal;  
  9. using Microsoft.AspNetCore.Http;  
  10. using Microsoft.AspNetCore.Mvc;  
  11. using Microsoft.CodeAnalysis.CSharp.Syntax;  
  12. using Microsoft.EntityFrameworkCore.Storage.Internal;  
  13. using Microsoft.Extensions.Configuration;  
  14. using Microsoft.Extensions.Logging;  
  15. using PersonLinkCore.WebUI.Entity;  
  16. using PersonLinkCore.WebUI.Repository.IRepository;  
  17.   
  18. namespace PersonLinkCore.WebUI.Controllers  
  19. {  
  20.     public class HomeController : Controller  
  21.     {  
  22.         private ISysOptions _sysOptions;  
  23.         private ILoggerFactory _loggerFactory;  
  24.   
  25.           
  26.         public HomeController(ISysOptions sysOptions,ILoggerFactory loggerFactory)  
  27.         {  
  28.             _sysOptions = sysOptions;  
  29.             _loggerFactory = loggerFactory;  
  30.         }  
  31.           
  32.        public async Task<IActionResult> Index()  
  33.         {  
  34.             var logger = _loggerFactory.CreateLogger<HomeController>();  
  35.             logger.LogInformation(_sysOptions.GetSysaOptions().Result.Name);  
  36.             logger.LogInformation("你访问了首页");  
  37.            return View();  
  38.         }  
  39.   
  40.         public IActionResult Error()  
  41.         {  
  42.             return View();  
  43.         }  
  44.     }  
  45. }  

这里,我默认将获取到的信息保存到了日志文件中,我们打开日志文件,可以看到写入的信息

本文地址:https://www.lisen.me/netcore-using-autofac-dependency-injection.html
版权声明:本文为原创文章,版权归 木子网 所有,欢迎分享本文,转载请保留出处!

发表评论


表情