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




posted @ 2025-09-18 16:34  爱晒太阳的懒猫。。  阅读(13)  评论(0)    收藏  举报