.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) {//服务项目程序集 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(); }
//方法二不推荐(手动,服务多了很麻烦也容易出错)
protected override void Load(ContainerBuilder containerBuilder)
{
containerBuilder.RegisterType<ArticleService>().As<IArticleService>();
containerBuilder.RegisterType<ArticleRepository>().As<IArticleRepository>();
containerBuilder.RegisterType<BaseRepository<Article>>().As<IBaseRepository<Article>>();
}
}
}
针对以上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.为什么控制类中需要把服务映射成服务接口类在注入使用?

浙公网安备 33010602011771号