在Senparc.Weixin.MP 中使用依赖注入获取 DbContext
在构造函数中注入 DbContext 可以实现获取依赖注入的 DbContext。具体操作如下:
- 在 CustomMessageHandler 类中添加一个私有字段 _dbContext:
private readonly ApplicationDbContext _dbContext;
- 修改 CustomMessageHandler 构造函数,添加一个参数 dbContext:
public CustomMessageHandler(Stream inputStream, PostModel postModel, int maxRecordCount = 0, bool onlyAllowEncryptMessage = false, IServiceProvider serviceProvider = null, ApplicationDbContext dbContext = null)
: base(inputStream, postModel, maxRecordCount, onlyAllowEncryptMessage, serviceProvider: serviceProvider)
{
_dbContext = dbContext ?? ServiceLocator.GetService<ApplicationDbContext>();
//这里设置仅用于测试,实际开发可以在外部更全局的地方设置,
//比如MessageHandler<MessageContext>.GlobalGlobalMessageContext.ExpireMinutes = 3。
GlobalMessageContext.ExpireMinutes = 3;
OnlyAllowEncryptMessage = false; //是否只允许接收加密消息,默认为 false
}
- 在 Startup.cs 文件中,注册 dbContext:
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString('DefaultConnection')));
- 在 GenerateMessageHandler 委托中,将 dbContext 作为参数传递:
public static Func<Stream, PostModel, int, IServiceProvider, CustomMessageHandler> GenerateMessageHandler = (stream, postModel, maxRecordCount, serviceProvider)
=> new CustomMessageHandler(stream, postModel, maxRecordCount, false /* 是否只允许处理加密消息,以提高安全性 */, serviceProvider: serviceProvider, dbContext: serviceProvider.GetService<ApplicationDbContext>());
这样就可以在 CustomMessageHandler 中使用 dbContext 了。在需要使用 dbContext 的方法中,直接使用字段 _dbContext 即可。
原文地址: https://www.cveoy.top/t/topic/nEkz 著作权归作者所有。请勿转载和采集!