安装包-NuGet
Autofac.Extensions.DependencyInjection
Autofac.Extras.DynamicProxy
服务替换
Program中的CreateHostBuilder替换默认容器
Host.CreateDefaultBuilder(args)//定义Auto容器.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 完成
