core6.0 autofac

2 篇文章 0 订阅

autofac
Autofac.Extensions.DependencyInjection
Autofac.Extras.DynamicProxy

  1. 添加 Nuget 包引用
    使用 Autofac 当然要添加 Autofac 的 Nuget 包,主要涉及到两个:
    Autofac.Extensions.DependencyInjection 核心支持包
    Autofac.Extras.DynamicProxy2 AOP 动态代理支持

  2. 配置 Autofac
    首先需要需要配置 Autofac 的容器工厂。
    IHostBuilder 定义了扩展依赖注入容器的扩展点:
    UseServiceProviderFactory(),提供创建 Service Provider 的对象。
    ConfigureContainer(),配置依赖注入容器

需要在Program中添加:
.UseServiceProviderFactory(new AutofacServiceProviderFactory())

UseServiceProviderFactory 是用于注册第三方容器的入口

Autofac 提供了各种注册服务的方法,不是微软的 Addxxx() 方式,而是 Registerxxx() 方式。
直接贴代码

创建一个类,里面反射程序集

 public class AutofacModuleRegister : Autofac.Module
    {

        protected override void Load(ContainerBuilder builder)
        {
            //获取项目绝对路径
            var basePath = AppContext.BaseDirectory;


            //获取到接口的两个dll
            var servicedll = Path.Combine(basePath, "ceshisqlsugar.Service.dll");
           if (!File.Exists(servicedll))
            {
                var msg = "Repository.dll和Services.dll 丢失,因为项目解耦了,所以需要先F6编译,再F5运行,请检查 bin 文件夹,并拷贝。";
                throw new Exception(msg);
            }

            // 获取 Service.dll 程序集服务,并注册
            var serviceAssembly = Assembly.LoadFrom(servicedll);
            builder.RegisterAssemblyTypes(serviceAssembly)
                .AsImplementedInterfaces()//是以接口方式进行注入,注入这些类的所有的公共接口作为服务(除了释放资源)
                .InstancePerDependency()//默认模式,每次调用,都会重新实例化对象;每次请求都创建一个新的对象
           .PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies);


        }

    }

在Program中调用

builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
var hostBuilder = builder.Host.ConfigureContainer<ContainerBuilder>(builder =>
{
    builder.RegisterModule(new AutofacModuleRegister());
});

这个代码可以直接拿去用(修改servicedll 中的dll改成自己的就行)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值