.NetCore 3.0 中使用 Aspectcore + Autofac

        .NetCore 3.0 正式版已经发布了,最近尝试的几个测试项目都用的 .NetCore 3.0 。但是在使用时发现,以前使用 Aspectcore 和 Autofac 的方法不好用了。

        之前的方法都是 在 ConfigureServices 方法里,用 Autofac 从程序集里加载注入的接口和实现,然后用AspectCore 注册动态代理,然后构建 IServiceProvider 然后返回,并把  ConfigureServices 方法的返回类型改为  IServiceProvider 。

public IServiceProvider ConfigureServices(IServiceCollection services)
{ 
    builder.RegisterAssemblyTypes(System.Reflection.Assembly
        .GetExecutingAssembly())
        .Where(x =>x.Name.EndsWith("thing")).AsImplementedInterfaces();

    builder.RegisterDynamicProxy();
    var container = builder.Build();

    return new AutofacServiceProvider(container);
}

        但在 .NetCore 3.0 里,这样做不行了,提示错误。

        NotSupportedException: ConfigureServices returning an System.IServiceProvider isn't supported.

        那要怎么在 .NetCore 3.0 里结合使用 Aspectcore 和 Autofac 呢?其实更简单了。

        第一步:安装NUGET包:AspectCore.Extensions.Autofac 和 Autofac.Extensions.DependencyInjection
        第二步:在 Program.cs 里加上这句: .UseServiceProviderFactory(new AutofacServiceProviderFactory(),如下:

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        }).UseServiceProviderFactory(new AutofacServiceProviderFactory());

        第三步: 在 Startup.cs 里添加 ConfigureContainer(ContainerBuilder builder),并在注册完服务、仓储后 执行 builder.RegisterDynamicProxy() 代码如下:

public void ConfigureContainer(ContainerBuilder builder)
{
    builder.RegisterAssemblyTypes(typeof(Program).Assembly).
        Where(x => x.Name.EndsWith("service", StringComparison.OrdinalIgnoreCase)).AsImplementedInterfaces();
            builder.RegisterDynamicProxy();
}

好了,可以继续开心地玩耍了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值