You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity注册报错:同时设置MappedToType与InjectionFactory不被支持的求助

解决Unity注册DbContext时“同时设置MappedToType和InjectionFactory不被支持”的问题

嘿,这个问题我之前用Unity 4.x版本时也碰到过,原因其实挺清晰的:当你用RegisterType<DbContext, MyDBContext>这种泛型注册写法时,已经明确告诉Unity要把DbContext映射到MyDBContext类型(也就是设置了MappedToType),这时候再传入InjectionFactory就会产生冲突——Unity搞不清楚该用哪个逻辑创建实例:是直接实例化MyDBContext,还是调用你提供的工厂方法?

下面给你两种可行的解决方案:

方案一:直接注册DbContext类型,用工厂方法提供实例

既然你的CreateDBContext()已经返回了MyDbContext实例(它本身就是DbContext的子类),那完全不需要再指定映射类型,直接注册DbContext即可:

container.RegisterType<DbContext>(new PerRequestLifetimeManager(), new InjectionFactory(x => CreateDBContext()));

private static MyDbContext CreateDBContext() 
{
    MyDbContext dbContext = new MyDbContext();
    // 这里补充你的DbContext初始化逻辑,比如配置连接字符串、启用懒加载等
    return dbContext;
}

这样Unity会通过你提供的工厂方法创建MyDbContext实例,并将其作为DbContext类型的服务返回,完美避开冲突。

方案二:先注册MyDbContext,再映射DbContext到它

如果你的代码里有很多地方直接依赖MyDbContext,可以先注册这个具体类型,再把DbContext映射到已注册的MyDbContext上:

// 先注册具体的MyDbContext,绑定生命周期和工厂方法
container.RegisterType<MyDbContext>(new PerRequestLifetimeManager(), new InjectionFactory(x => CreateDBContext()));

// 再将DbContext类型映射到已注册的MyDbContext实例
container.RegisterType<DbContext>(new PerRequestLifetimeManager(), new InjectionFactory(x => x.Resolve<MyDbContext>()));

这种方式既满足了直接依赖MyDbContext的场景,也能让依赖DbContext的地方正常解析到实例。

额外提醒

记得把CreateDBContext()方法补全,比如确保MyDbContext的连接字符串配置正确,避免后续出现数据库连接相关的问题。

内容的提问来源于stack exchange,提问作者LP13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:48:14