首页 > 其他分享 >房产中介管理软件第13课:使用AutoFac做依赖注入处理

房产中介管理软件第13课:使用AutoFac做依赖注入处理

时间:2023-03-27 09:55:52浏览次数:40  
标签:AutoFac Task 13 Fangv8 System 管理软件 Randy using public

使用了AutoFac做依赖注入的处理

一、nuget加载AutoFac

二、Program.cs中注入代码

#region Autofac 自动注册
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
var hostBuilder = builder.Host.ConfigureContainer<ContainerBuilder>(builder =>
{
    try
    {
        var assemblysRepository = Assembly.Load("Randy.Fangv8.Repository");
        var assemblysServices = Assembly.Load("Randy.Fangv8.Service");
        builder.RegisterAssemblyTypes(assemblysRepository).Where(t => t.Name.StartsWith("TB") && t.Name.EndsWith("Repository")).AsSelf().AsImplementedInterfaces();
        builder.RegisterAssemblyTypes(assemblysServices).Where(t => t.Name.StartsWith("TB") && t.Name.EndsWith("Service")).AsSelf().AsImplementedInterfaces();
    }
    catch (Exception ex)
    {
        throw new Exception(ex.Message + "\n" + ex.InnerException);
    }
});
#endregion

会自动注册模块Randy.Fangv8.Repository下的所有以TB开头,以Repository的类

会自动注册模块Randy.Fangv8.Service下的所有以TB开头,以Service的类

三、检查文件

文件一、IBaseRepository.cs

using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Randy.Fangv8.Repository
{
    public interface IBaseRepository<TEntity> where TEntity : class, new ()
    {
        #region 查询
        /// <summary>
        /// 通过主键ID获取数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public Task<TEntity> GetById<T>(T id);
        #endregion

        #region 新增
        /// <summary>
        /// 写入实体数据
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public Task<bool> Add(TEntity model);
        #endregion

        #region 修改
        /// <summary>
        /// 更新实体数据
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public Task<bool> Update(TEntity model);
        #endregion

        #region 删除
        /// <summary>
        /// 根据ID删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public Task<bool> DeleteById<T>(T id);

        /// <summary>
        /// 根据多个ID删除
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public Task<int> DeleteByIds<T>(T[] ids);
        #endregion
    }
}

文件二 :BaseRepository.cs

using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Randy.Fangv8.Repository
{
    public class BaseRepository<TEntity>:IBaseRepository<TEntity> where TEntity : class, new ()
    {
        private ISqlSugarClient _db;

        /// <summary>
        /// 构造函数依赖注入
        /// </summary>
        /// <param name="db"></param>
        public BaseRepository(ISqlSugarClient db)
        {
            _db = db;
        }

        #region 查询
        /// <summary>
        /// 通过主键ID获取数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task<TEntity> GetById<T>(T id) {
            return await _db.Queryable<TEntity>().InSingleAsync(id);
        }
        #endregion

        #region 新增
        /// <summary>
        /// 写入实体数据
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task<bool> Add(TEntity model)
        {
            var i = await _db.Insertable(model).ExecuteCommandAsync();
            return i > 0;
        }
        #endregion

        #region 修改
        /// <summary>
        /// 更新实体数据
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task<bool> Update(TEntity model)
        {
            //这种方式会以主键为条件
            var i = await _db.Updateable(model).ExecuteCommandAsync();
            return i > 0;
        }
        #endregion

        #region 删除
        /// <summary>
        /// 根据ID删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task<bool> DeleteById<T>(T id)
        {
            var i = await _db.Deleteable<TEntity>().In(id).ExecuteCommandAsync();
            return i > 0;
        }

        /// <summary>
        /// 根据多个ID删除
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public async Task<int> DeleteByIds<T>(T[] ids)
        {
            return await _db.Deleteable<TEntity>().In(ids).ExecuteCommandAsync();
        }
        #endregion
    }
}

文件三:ITBTestRepository.cs

using Randy.Fangv8.Model;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Randy.Fangv8.Repository
{
    public interface ITBTestRepository : IBaseRepository<TBTest>
    {
        
    }
}

文件四:TBTestRepository.cs

using Randy.Fangv8.Model;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Randy.Fangv8.Repository
{
    public class TBTestRepository : BaseRepository<TBTest>, ITBTestRepository
    {
        public TBTestRepository(ISqlSugarClient sqlSugar) : base(sqlSugar)
        {
            
        }
    }
}

文件五:IBaseService.cs

using Randy.Fangv8.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Randy.Fangv8.Service
{
    public interface IBaseService<TEntity> where TEntity : class, new()
    {
        #region 查询
        /// <summary>
        /// 通过主键ID获取数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public Task<TEntity> GetById<T>(T id);
        #endregion

        #region 新增
        /// <summary>
        /// 写入实体数据
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public Task<bool> Add(TEntity model);
        #endregion

        #region 修改
        /// <summary>
        /// 更新实体数据
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public Task<bool> Update(TEntity model);
        #endregion

        #region 删除
        /// <summary>
        /// 根据ID删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public Task<bool> DeleteById<T>(T id);

        /// <summary>
        /// 根据多个ID删除
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public Task<int> DeleteByIds<T>(T[] ids);
        #endregion
    }
}

文件六:BaseService.cs

using Randy.Fangv8.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Randy.Fangv8.Service
{
    public class BaseService<TEntity> : IBaseService<TEntity> where TEntity : class, new()
    {
        private readonly IBaseRepository<TEntity> _repository;

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="repository"></param>
        public BaseService(IBaseRepository<TEntity> repository)
        {
            _repository = repository;
        }

        #region 查询
        /// <summary>
        /// 通过主键ID获取数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task<TEntity> GetById<T>(T id)
        {
            return await _repository.GetById(id);
        }
        #endregion

        #region 新增
        /// <summary>
        /// 写入实体数据
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task<bool> Add(TEntity model)
        {
            return await _repository.Add(model);
        }
        #endregion

        #region 修改
        /// <summary>
        /// 更新实体数据
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task<bool> Update(TEntity model)
        {
            return await _repository.Update(model);
        }
        #endregion

        #region 删除
        /// <summary>
        /// 根据ID删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task<bool> DeleteById<T>(T id)
        {
            return await _repository.DeleteById(id);
        }

        /// <summary>
        /// 根据多个ID删除
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public async Task<int> DeleteByIds<T>(T[] ids)
        {
            return await _repository.DeleteByIds(ids);
        }
        #endregion
    }
}

文件七:ITBTestService.cs

using Randy.Fangv8.Model;
using Randy.Fangv8.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Randy.Fangv8.Service
{
    public interface ITBTestService : IBaseService<TBTest>
    {
        
    }
}

 文件八:TBTestService.cs

using Randy.Fangv8.Model;
using Randy.Fangwv8.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Randy.Fangv8.Service
{
    public class TBTestService : BaseService<TBTest>, ITBTestService
    {
        public TBTestService(ITBTestRepository repository) : base(repository)
        {

        }
    }
}

 

四、测试执行

1、定义和注入

//注入配置文件
private readonly IOptionsSnapshot<TenantConfig> _tenantConfig;
private readonly ILogger<TestController> _logger;
private readonly ISqlSugarClient _db;
private readonly ITBTestRepository _testRepository;
private readonly ITBTestService _testService;

/// <summary>
/// 构造函数依赖注入TBTestService testService, 
/// </summary>
/// <param name="tenantConfig"></param>
/// <param name="logger"></param>
/// <param name="db"></param>
/// <param name="testRepository"></param>
/// <param name="testService"></param>
public TestController(IOptionsSnapshot<TenantConfig> tenantConfig, ILogger<TestController> logger, ISqlSugarClient db, ITBTestRepository testRepository, ITBTestService testService) {
    _tenantConfig = tenantConfig;
    _logger = logger;
    _db = db;
    _testRepository = testRepository;
    _testService = testService;
}

2、调用

//测试Sqlsugar
//var modTest = _db.Queryable<TBTest>().InSingle(1);
//return Ok(modTest);

//测试Repository读取数据
//var modTest = await _testRepository.GetById<int>(1);
//return Ok(modTest);

//测试Service读取数据
var modTest = await _testService.GetById<int>(1);
return Ok(modTest);

3、结果

 

 

(完毕)

标签:AutoFac,Task,13,Fangv8,System,管理软件,Randy,using,public
From: https://www.cnblogs.com/randytech/p/17260389.html

相关文章

  • 13.Linux权限提升与维持
    Linux权限提升与维持目录Linux权限提升与维持Linux权限提升(PrivilegeEscalation)1、内核漏洞提权2、SUDO提权3、SUID提权3、第三方服务提权4、提权辅助脚本Linux权限维持1......
  • 客户信息管理软件
    客户信息管理软件CMUtilityimportjava.util.Scanner;publicclassCMUtility{privatestaticScannerscanner=newScanner(System......
  • 力扣 131. 分割回文串
    131.分割回文串给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。......
  • [ARC139D] Priority Queue 2 题解
    上个世纪做过这题,然后今天比赛(abc295)出了道弱化没做出来,被pty喷了一遍后爬来写个题解/kk首先这种期望/总和题都有个套路,就是通过另外一种角度来计算每个元素的贡献。对......
  • C# autofac 在Net6中的使用
    十年河东,十年河西,莫欺少年穷。学无止境,精益求精。准备如下工作:新建一个Net6 webApi项目,并在该项目中引入:  新建类库MyInterface和MyService,项目构造如下  接口如下:/......
  • C# Autofac 构造函数注入,属性注入,方法注入
    十年河东,十年河西,莫欺少年穷。学无止境,精益求精。新建一个控制台应用程序,如下构造: MyAutoFac层引入autofac版本V6.5接口层如下:namespaceMyInterface{publicinter......
  • C# Autofac简单用法
    十年河东,十年河西,莫欺少年穷学无止境,精益求精新建一个控制台程序,如下 MyAutoFac项目引用NugetautofacV6.5版本新建如下接口:publicinterface动物{void......
  • Haskell CSCI3136 Ripple Effect
    HaskellCSCI3136RippleEffectProblemDescriptionRippleEffectorHakyuuisalogicpuzzlesomewhatsimilartoSudoku.Thepuzzleconsistsofarectangulargri......
  • day13-SpringBoot整合MyBatis/Plus
    SpringBoot整合MyBatis/Plus1.SpringBoot整合MyBatis1.1整合案例需求:整合SpringBoot和Mybatis,向数据库中查询数据。项目结构:1.1.1创建数据库和表--创建数据库DROP......
  • 今日共同报告-13-app底部导航栏的实现,fragment传参
    今日共同报告-13今天时间比较充沛,学了许多东西,主要是fragment传参,同时把底部导航栏完成了。目前进度的页面展示:能够实现点击切换和选中的选项颜色变化  部分代码:......