如何在 .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());
}