安装包-NuGet

Autofac.Extensions.DependencyInjection
Autofac.Extras.DynamicProxy

服务替换

Program中的CreateHostBuilder替换默认容器

  1. Host.CreateDefaultBuilder(args)
  2. //定义Auto容器
  3. .UseServiceProviderFactory(new AutofacServiceProviderFactory())……

定义新的服务注册方法

StartUp中添加新的方法 名称和参数都是约定好的 不能修改

// 注意在CreateDefaultBuilder中,添加Autofac服务工厂
/// <summary>
/// 自定义容器服务注册
/// </summary>
/// <param name="builder"></param>
public void ConfigureContainer(ContainerBuilder builder)
{

    builder.RegisterModule(new AutofacModuleRegister());
    builder.RegisterType<LogHelper>().As<ILogHelper>().SingleInstance();
    //builder.RegisterType(typeof(LogHelper<>)).As(typeof(ILogHelper<>));
}

AutofacModuleRegister

 public class AutofacModuleRegister:Autofac.Module
    {
        protected override void Load(ContainerBuilder builder)
        {
            var basePath = AppContext.BaseDirectory;;


            #region 带有接口层的服务注入

            var servicesDllFile = Path.Combine(basePath, "***.Services.dll");
            var repositoryDllFile = Path.Combine(basePath, "***.Repository.dll");

            if (!(File.Exists(servicesDllFile) && File.Exists(repositoryDllFile)))
            {
                var msg = "Repository.dll和service.dll 丢失,因为项目解耦了,所以需要先F6编译,再F5运行,请检查 bin 文件夹,并拷贝。";
                //log.Error(msg);
                throw new Exception(msg);
            }

            // 获取 Service.dll 程序集服务,并注册
            var assemblysServices = Assembly.LoadFrom(servicesDllFile);
            builder.RegisterAssemblyTypes(assemblysServices)
                      .AsImplementedInterfaces()
                      .InstancePerDependency()
                      .EnableInterfaceInterceptors();

            // 获取 Repository.dll 程序集服务,并注册
            var assemblysRepository = Assembly.LoadFrom(repositoryDllFile);
            builder.RegisterAssemblyTypes(assemblysRepository)
                   .AsImplementedInterfaces()
                   .InstancePerDependency();
            #endregion

        }
    }

OK 完成