WebAPI学习(七):IOC框架AutoFac

  1. 项目Nuget中引入
    Autofac.Extensions.DependencyInjection
    Autofac.Extras.DynamicProxy

    1

  2. 在Business文件夹下新增AutofacRegister.cs 并继承与Autofac.Module,重新Load方法
    public class AutofacRegister : Autofac.Module
     {
         protected override void Load(ContainerBuilder builder)
         {
             //注册Service
             var assemblysServices = Assembly.Load("TEST.Services");
             builder.RegisterAssemblyTypes(assemblysServices)
                 .InstancePerDependency() // 瞬时单例
                 .AsImplementedInterfaces() //自动以实现的所有接口类型暴露(包括IDisposable接口)
                 .EnableInterfaceInterceptors(); //引用Autofac.Extras.DynamicProxy;
    
             //注册Repository
             var assemblyRepository = Assembly.Load("TEST.Respository");
                  builder.RegisterAssemblyTypes(assemblyRepository)
                 .InstancePerDependency() // 瞬时单例
                 .AsImplementedInterfaces() //自动以实现的所有接口类型暴露(包括IDisposable接口)
                 .EnableInterfaceInterceptors(); //引用Autofac.Extras.DynamicProxy;
    
    
         }
     }
  3.  在Program.cs中注入Autofac
    //注入Autofac
    builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory())
        .ConfigureContainer<ContainerBuilder>(builder =>
        {
            //调用程序集注册存入方法
            builder.RegisterModule(new AutofacRegister());
        });
  4. 在BaseServices里改造下,直接通过构造函数注入
    //public IBaseRepository<TEntity> baseDal = new BaseRepository<TEntity>();
    
    private readonly IBaseRepository<TEntity> baseDal;
    
    /// <summary>
    /// 构造函数
    /// </summary>
    /// <param name="baseDal"></param>
    public BaseServices(IBaseRepository<TEntity> baseDal)
    {
        this.baseDal = baseDal;
    }
  5. StudentServices中也要改下

    private readonly IStudentRepository _studentRepository;
    
    /// <summary>
    /// 构造函数
    /// </summary>
    /// <param name="baseDal"></param>
    /// <param name="studentRepository"></param>
    public StudentServices(IBaseRepository<Student> baseDal,IStudentRepository studentRepository):base(baseDal)
    {
        _studentRepository = studentRepository;
    }
  6. 新建接口读取所有学生信息来验证Autofac 

         IStudentService

/// <summary>
/// 查询所有学生列表
/// </summary>
/// <returns></returns>
Task<List<Student>> GetStudents();

         StudentService

/// <summary>
/// 查询所有学生列表
/// </summary>
/// <returns></returns>
public async Task<List<Student>> GetStudents()
{
    return await _studentRepository.Query();
}

         StudentController

/// <summary>
/// 获取所有学生列表
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<IActionResult> GetStudents()
{
    var students = await stuService.GetStudents();
    return Ok(students);
}

运行项目

2

 

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容