虚方法
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.为什么控制类中需要把服务映射成服务接口类在注入使用?