【.Net Core一个MVC简单项目开发历程】(3)-----使用Autofac实现服务注册,AutoMapper实现对象映射


添加Autofac服务工厂

1.Nuget添加以下引用

2.在Startup中添加ConfigureContainer方法,然后在Program中添加CreateHostBuilder 

点击查看代码
// 注意在Program.CreateHostBuilder,添加Autofac服务工厂 
	public void ConfigureContainer(ContainerBuilder builder) 
	{ 
		builder.RegisterModule(); 
	}
	
	//Program.cs中修改
	public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup();
                });

3.在扩展类中ServiceExtensions中添加AutofacModuleRegister.cs实现具体的服务注册
点击查看代码
    public class AutofacModuleRegister: Autofac.Module
    {
        protected override void Load(ContainerBuilder builder)
        {
            var cacheType = new List();

            builder.RegisterGeneric(typeof(BaseRepository<>)).As(typeof(IBaseRepository<>)).InstancePerDependency();
            builder.RegisterGeneric(typeof(BaseServices<>)).As(typeof(IBaseServices<>)).InstancePerDependency();

            var assemblyServices = Assembly.Load("Demkin.Blog.Services");//这个注入的是实现类层,不是接口层
            builder.RegisterAssemblyTypes(assemblyServices)
                .AsImplementedInterfaces()
                .EnableInterfaceInterceptors() //引用Autofac.Extras.DynamicProxy 对目标类型启用接口拦截。拦截器将被确定,通过在类或接口上截取属性,或添加InterceptedBy ()
                .InterceptedBy(cacheType.ToArray());//允许将拦截器服务的列表分配给注册。;//指定已扫描程序集中的类型注册为提供所有其实现的接口。

            var assemblysRepository = Assembly.Load("Demkin.Blog.Repositories");//模式是load(解决方案名)
            builder.RegisterAssemblyTypes(assemblysRepository)
                .AsImplementedInterfaces();
        }
    }

添加AutoMapper映射

1.首先Nuget添加引用

2.在扩展类中ServiceExtensions中添加AddAutoMapperSetup.cs,静态方法启动服务

点击查看代码
    /// 
    /// AutoMapper 启动服务
    /// 
    public static class AutoMapperSetup
    {
        public static void AddAutoMapperSetup(this IServiceCollection services)
        {
            if (services==null)
            {
                throw new ArgumentNullException(nameof(services));
            }
            services.AddAutoMapper(typeof(AutoMapperConfig));
        }
    }
3.添加文件夹AutoMapper,在添加AutoMapperConfig作为静态全局AutoMapper的配置文件
点击查看代码
    /// 
    /// 静态全局AutoMapper的配置文件
    /// 
    public class AutoMapperConfig
    {
        public static MapperConfiguration RegisterMappings()
        {
            return new MapperConfiguration(cfg=>
            {
                //cfg.AddProfile
            });
        }
    }