.net core中获得程序集以及注入框架的方法总结

.net core中获得程序集以及注入框架的方法总结

虚方法

public class Animal
{
// 虚方法
public virtual void MakeSound()
{
Console.WriteLine("动物发出声音");
}
}public class Dog : Animal
{
// 重写虚方法
public override void MakeSound()
{
Console.WriteLine("汪汪汪!");
}
}

var sss = Assembly.Load("Swift.BBS.Service");//静态方法返回一个实例类Assembly
Assembly作为类,有静态方法和实例化后的方法,

program.cs

builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
builder.Host.ConfigureContainer<ContainerBuilder>(builder => builder.RegisterModule(new AutofacModuleRegister()));

 

Extensions类库下AutofacModuleRegister.cs

namespace SwiftCode.BBS.Extensions.ServiceExtensions
{public class AutofacModuleRegister:Autofac.Module{protected override void Load(ContainerBuilder containerBuilder){//containerBuilder.RegisterType<ArticleSerivce>().As<IArticleService>();//服务项目程序集Assembly service = Assembly.Load("Swift.BBS.Service");Assembly repository = Assembly.Load("Swift.BBS.Repository");//项目必须以xxx结尾containerBuilder.RegisterAssemblyTypes(service).Where(n => n.Name.EndsWith("Service") && !n.IsAbstract).InstancePerLifetimeScope().AsImplementedInterfaces();containerBuilder.RegisterAssemblyTypes(service).Where(n => n.Name.EndsWith("Repository") && !n.IsAbstract).InstancePerLifetimeScope().AsImplementedInterfaces();}}
}

针对以上Autofac注入依赖项,的几个问题
1. containerBuilder.RegisterAssemblyTypes(service).Where(n => n.Name.EndsWith("Service") && !n.IsAbstract) .InstancePerLifetimeScope().AsImplementedInterfaces();是什么意思?
//RegisterAssemblyTypes(service).Where(n => n.Name.EndsWith("Service") && !n.IsAbstract)获得service程序集并进行筛选,后跟筛选条件,IsAbstract抽象类
//.InstancePerLifetimeScope()注册为Scope类型作用域
//AsImplementedInterfaces()映射(publicservice: Ipublicservice,publicservice自动映射成ipublicservice,在控制类可以直接注册ipublicservice使用)
2.为什么控制类中需要把服务映射成服务接口类在注入使用?