.NET EF contextfactory 通过库共享

问题描述 投票:0回答:1

我有一个项目,其中有

MyDbContext
类和 dbsets 等。我有一个库项目,其中有一些在我的项目中共享的实用程序。

我也想在图书馆使用

MyDbContext
。但对于每个项目来说,
dbcontext
在逻辑上都是另一个。我想通过接口来完成它,其中将是属性
IDbContextFactory
。但是这个接口需要泛型类型(
DbContext
),但它在库中不存在。

我试图找到一些解决方案,但我不知道该怎么做。

谢谢您的建议。

[编辑]

这是我的应用程序中

public partial class TestRepository 
{
   public TestRepository(IDbContextFactory<MyDbContext> con) 
   {
   }
}

我会在图书馆使用类似的东西。但我不能在那里使用

MyDbContext
,因为那里不存在。所以我希望我会使用引用
IDbContextFactory
的接口来完成此操作,但我需要泛型类型...

// Not working in library
public partial class TestRepository 
{
   public TestRepository(IDbContextFactory<MyDbContext> con) 
   {
   }
}

// Maybe works but I don't how do it
public partial class TestRepository 
{
   public TestRepository(IFrameworkDbContextFactory con) 
   {
   }
}
c# .net entity-framework
1个回答
1
投票

也许这可以帮助你。

在库 crete 界面中

public interface ISharedDbContextFactory : IDbContextFactory<DbContext> {}

在项目中实施它

public class SharedDbContextFactory : ISharedDbContextFactory {
   private IDbContextFactory<MyDbContext> _contextFactory;

   public SharedDbContextFactory(IDbContextFactory<MyDbContext> contextFactory) {
       _contextFactory = contxtFactory;
   }

   public MyDbContext CreateDbContext()
   {
       return _contextFactory.CreateDbContext();
   }
}

然后添加到di配置中。您也可以仅注册到 IDbContextFactory 并使用它。我认为最好有您的自定义界面。

希望我给了你一些建议并且没有说错什么。有人可以纠正我吗

© www.soinside.com 2019 - 2024. All rights reserved.