EF5拆分DbContext注入服务时遇构造函数歧义错误求助
解决Entity Framework 5中DbContext构造函数歧义的问题
问题根源
DI容器解析MyDbContext时,发现存在两个可用构造函数(无参和带DbContextOptions参数的),无法确定使用哪一个,因此抛出"构造函数存在歧义"的错误。注入控制器时没报错只是巧合,DI在不同场景下的解析逻辑表现有差异。
正确构造函数选择
保留带DbContextOptions<MyDbContext>参数的构造函数,删除无参构造函数,理由如下:
services.AddDbContext<MyDbContext>()的作用就是在DI容器中注册DbContext,并自动传入配置好的DbContextOptions实例,带参数的构造函数正是为这个依赖注入场景设计的。- 无参构造函数仅适用于手动创建DbContext实例的场景(比如Code-First迁移命令行工具),在依赖注入驱动的ASP.NET Core应用中完全多余,反而会引发DI解析冲突。
具体操作步骤
- 打开脚手架自动生成的
MyDbContext分部文件 - 删除无参构造函数:
public MyDbContext(){} - 保留以下构造函数:
public MyDbContext(DbContextOptions<MyDbContext> options) : base(options){}
修改完成后,DI容器就能明确找到唯一的构造函数,无论是注入控制器还是你通过services.AddScoped()注册的服务,都能正常解析MyDbContext了。
内容的提问来源于stack exchange,提问作者Emaborsa
相关产品推荐
相关产品推荐

