如何在 .net 4.7 项目中使用 Unity 容器解析 EF Core 上下文
How to resolve EF Core context with Unity container in a .net 4.7 project
我遇到一个问题,我需要将我的项目升级到最新版本的 .NET,目前所有项目都是 .NET 4.7 或 .NET Standard 2.0 使用 Entity Framework 6 然后通过 WCF 公开通过 Unity 获取其实例化的服务。
计划从从 EF 6 升级到 EF Core 3 开始,然后使用控制反转将其解耦,以便能够在需要时更改底层数据访问,这已从所有存储库调用参考开始接口 IMyDbContext 似乎没问题。
现在我遇到了如何从 WCF 应用程序中的 Unity 容器解析 IMyDbContext 的问题,因为它是 .Net 4.7 并且包含 MyDbContext 的项目是 .net core 3。
任何 pointers/references 将不胜感激。
对于具有多个项目的解决方案,一些在 .Net Framework 上,一些在 .Net Core 上,我使用这样的方法:
public class MyContext : DbContext
{
static MyContext()
{
Database.SetInitializer<MyContext>(null);
}
[InjectionConstructor] //Used to specify the constructor to Unity
public MyContext()
: base("Name=MyContext")
{
}
public MyContext(string connectionString) //Used to resolve de dependency in .net Core
: base(connectionString)
{
}
}
Startup.cs 在 .Net Core MVC 项目中
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddScoped<MyContext>(_ => new MyContext(Configuration.GetConnectionString("DefaultConnection")));
}
并且在 .Net Framework 项目中作为参数传递给存储库 IDoStuffRepo,它是这样注册的:
public override void Initialize(){
this.Container.RegisterType<IDoStuffRepo, DoStuffRepo>(new DisposableTransientLifetimeManager());
}
我遇到一个问题,我需要将我的项目升级到最新版本的 .NET,目前所有项目都是 .NET 4.7 或 .NET Standard 2.0 使用 Entity Framework 6 然后通过 WCF 公开通过 Unity 获取其实例化的服务。
计划从从 EF 6 升级到 EF Core 3 开始,然后使用控制反转将其解耦,以便能够在需要时更改底层数据访问,这已从所有存储库调用参考开始接口 IMyDbContext 似乎没问题。
现在我遇到了如何从 WCF 应用程序中的 Unity 容器解析 IMyDbContext 的问题,因为它是 .Net 4.7 并且包含 MyDbContext 的项目是 .net core 3。
任何 pointers/references 将不胜感激。
对于具有多个项目的解决方案,一些在 .Net Framework 上,一些在 .Net Core 上,我使用这样的方法:
public class MyContext : DbContext
{
static MyContext()
{
Database.SetInitializer<MyContext>(null);
}
[InjectionConstructor] //Used to specify the constructor to Unity
public MyContext()
: base("Name=MyContext")
{
}
public MyContext(string connectionString) //Used to resolve de dependency in .net Core
: base(connectionString)
{
}
}
Startup.cs 在 .Net Core MVC 项目中
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddScoped<MyContext>(_ => new MyContext(Configuration.GetConnectionString("DefaultConnection")));
}
并且在 .Net Framework 项目中作为参数传递给存储库 IDoStuffRepo,它是这样注册的:
public override void Initialize(){
this.Container.RegisterType<IDoStuffRepo, DoStuffRepo>(new DisposableTransientLifetimeManager());
}