gpt4 book ai didi

asp.net - 不支持同时设置 MappedToType 和 InjectionFactory 的注册

转载 作者:行者123 更新时间:2023-12-02 16:05:22 27 4
gpt4 key购买 nike

我有 ASP.NET MVC 应用程序。它使用的是 .NET 4.5.1 和以下 Unity 版本

<package id="Unity" version="4.0.1" targetFramework="net451" />
<package id="Unity.Mvc" version="4.0.1" targetFramework="net451" />

这就是我注册 DBContext 的方式

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

private static MyDbContext CreateDBContext()
{
MyDbContext dbContext = new MyDbContext ();
dbContext.Configuration.LazyLoadingEnabled = false;// turn-off loading on-demand
dbContext.Configuration.ProxyCreationEnabled = false;// turn-off dynamic proxy class generation
return dbContext;
}

这一直运行良好。
现在我将 .NET Framework 更新至 4.6.2,并将 Unity 版本更新至

<package id="Unity" version="5.8.5" targetFramework="net462" />
<package id="Unity.Abstractions" version="3.3.0" targetFramework="net462" />
<package id="Unity.Container" version="5.8.5" targetFramework="net462" />
<package id="Unity.Mvc" version="5.0.13" targetFramework="net462" />

但是,这样做会在 DBContext 注册期间应用程序启动时引发异常

Registration where both MappedToType and InjectionFactory are set is not supported

最佳答案

使用 InjectionFactory 时,不应在 RegisterType 中设置要实例化的显式类型。

这应该有效:

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

您将实例化对象的工作委托(delegate)给自定义工厂,因此容器不需要知道要实例化的类型。

关于asp.net - 不支持同时设置 MappedToType 和 InjectionFactory 的注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49906305/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com