【.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));
}
}
点击查看代码
///
/// 静态全局AutoMapper的配置文件
///
public class AutoMapperConfig
{
public static MapperConfiguration RegisterMappings()
{
return new MapperConfiguration(cfg=>
{
//cfg.AddProfile
});
}
}