专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

Asp.Net Core 依赖注入默认DI,Autofac注入

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 1:00:53       共计:3636 浏览

修改Startup类方法ConfigureServices如下:


public void ConfigureServices(IServiceCollection services)

{

  services.AddMvc();

  //注册接口

  services.AddTransient<IDbMovieService, DbMovieService>();

}


controller构造函数调用如下:


public readonly IDbMovieService _DbMovieService;

public HomeController(IDbMovieService dbMovieService)

{

   _DbMovieService = dbMovieService;

}

public IActionResult Index()

{

   _DbMovieService.MovieAnalysis();

   return View();

}


瞬时

瞬时(Transient)生命周期服务在它们每次请求时被创建。这一生命周期适合轻量级的,无状态的服务。


作用域

作用域(Scoped)生命周期服务在每次请求被创建一次。


单例

单例(Singleton)生命周期服务在它们第一次被请求时创建(或者如果你在 ConfigureServices

运行时指定一个实例)并且每个后续请求将使用相同的实例。如果你的应用程序需要单例行为,建议让服务容器管理服务的生命周期而不是在自己的类中实现单例模式和管理对象的生命周期。

使用Autofac


首先,需要从nuget引用相关的包.


Autofac


Autofac.Extensions.DependencyInjection(这个包扩展了一些微软提供服务的类.来方便替换autofac)


然后,我们修改Startup中的ConfigureServices代码如下:


public IServiceProvider ConfigureServices(IServiceCollection services)

{

   services.AddMvc();

// Add Autofac

   var containerBuilder = new ContainerBuilder();

   containerBuilder.RegisterModule<AutofacConfig>();

   containerBuilder.Populate(services);

   var container = containerBuilder.Build();

   return new AutofacServiceProvider(container);

}


AutofacConfig.cs源码如下:


using Autofac;

using MG.AngleSharp;

using MG.AngleSharp.Service;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Threading.Tasks;


namespace MG.Web.AutofacConfig

{

   public class AutofacConfig: Module

   {

       protected override void Load(ContainerBuilder builder)

       {

           builder.RegisterType<DbMovieService>().As<IDbMovieService>();

       }

   }

}


加载程序集注册方式如下:


public IServiceProvider ConfigureServices(IServiceCollection services)

{

   services.AddMvc();

   // Add Autofac

   var builder = new ContainerBuilder();

   builder.Populate(services);

   //加载程序集

   // var assembly = this.GetType().GetTypeInfo().Assembly;

   var assembly = Assembly.Load("MG.AngleSharp");//获取MG.AngleSharp 程序集

   var baseType = typeof(IDependency);//IDependency 是一个接口  

   builder.RegisterAssemblyTypes(assembly)

          .Where(m => baseType.IsAssignableFrom(m) && m != baseType)

          .AsImplementedInterfaces().InstancePerLifetimeScope();

   var container = builder.Build();

   return new AutofacServiceProvider(container);

}


IDependency是一个空接口类,用于判断是否需要注册该接口。


调用方式推荐使用构造函数方式引用。


获取bin目录下所有程序集


//加载程序集

//var assembly1 = this.GetType().GetTypeInfo().Assembly;//获取当前程序集

var assemblys = AppDomain.CurrentDomain.BaseDirectory;

DirectoryInfo theFolder = new DirectoryInfo(assemblys);

foreach (var item in theFolder.GetFiles("*.dll"))

{

  var assembly = Assembly.Load(item.Name.Replace(".dll", ""));//加载程序集

  var baseType = typeof(IDependency);//IDependency 是一个接口  

  builder.RegisterAssemblyTypes(assembly)

         .Where(m => baseType.IsAssignableFrom(m) && m != baseType)

         .AsImplementedInterfaces().InstancePerLifetimeScope();

}

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:浅谈ASP.NET Core中的DI | ·下一条:.netcore 利用 Autofac泛型依赖注入

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有