Auto register by using Microsoft.Extensions.DependencyInjection.Check detail from github for how to use.
$ dotnet add package Newcats.DependencyInjectionpublic class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddHttpContextAccessor();
services.AddDependencyInjection();//注册依赖
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseStaticHttpContext();//可选,如需使用HttpContext.RequestServices.GetService<IService>();则必须添加此行代码
}
}
/// <summary>
/// 自定义依赖注册器
/// </summary>
public class ServiceRegister : IDependencyRegistrar
{
public void Register(IServiceCollection services)
{
const string mySqlStr = "server=localhost;port=3306;database=NewcatsDB20211019;uid=root;pwd=1232@mysql;CharSet=utf8;AllowLoadLocalInfile=true";
services.AddScoped<IFileStore, FileStore>();
//services.AddScoped(typeof(DataAccess.SqlServer.IRepository<>), typeof(DataAccess.SqlServer.Repository<>));//注册泛型仓储
//services.AddScoped(typeof(DataAccess.MySql.IRepository<>), typeof(DataAccess.MySql.Repository<>));//注册泛型仓储
services.AddMySqlDataAccess<MySqlDbContext>(opt =>
{
opt.ConnectionString = mySqlStr;
});
}
}
//接口
public interface IUserInfoService : IScopedDependency
{
}
//实现
public class UserInfoService : IUserInfoService
{
}
//控制器
public class UserInfoController : ControllerBase
{
private readonly IUserInfoService _userService;
public UserInfoController(IUserInfoService userService)
{
_userService = userService;//此处得到的即为IUserInfoService的实现类UserInfoService
}
}
如果你在阅读或使用任意一个代码片断时发现Bug,或有更佳实现方式,欢迎提Issue。
对于你提交的代码,如果我们决定采纳,可能会进行相应重构,以统一代码风格。
对于热心的同学,将会把你的名字放到贡献者名单中。
MIT © Newcats