我有一个基于 .net core 的项目。我想要使用 Castle Windosr 注册 Ef Core 上下文,但是我找不到在 .net core 中实现 EfCore Wireup 上下文的解决方案。谢谢。
我有一个基于 .net core 的项目。我想要使用 Castle Windosr 注册 Ef Core 上下文,但是我找不到在 .net core 中实现 EfCore Wireup 上下文的解决方案。谢谢。
如果您想要做这个,首先需要知道您有一个上下文(Context),其中包含一个DbContextOptionsBuilder参数。如果您已经添加了这些构造函数,那么您也需要进行注册。现在,我下面写的代码使您不再需要使用OnConfiguring方法。
public static class DbContextFactoryBuilder
{
public static IDbContext Create(string connectionString)
{
var result = new MyDbContext(new DbContextOptionsBuilder().UseSqlServer(connectionString).Options);
return result;
}
}
并且还有在城堡注册的代码。
container.Register(Component.For<MyDbContext>().UsingFactoryMethod(c => DbContextFactoryBuilder.Create(@"---your connection string---")));
另一个选择是:
public class MyContext : DbContext
{
private readonly string connectionString;
public MyContext (string connectionString)
{
this.connectionString = connectionString;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(this.connectionString);
}
}
Component.For<MyContext>().DependsOn(Property.ForKey<string>().Eq("your connection string")));
DbContextOptionsBuilder
(如不同答案所示),另一个是保护的没有任何参数。因此,最终您可以创建您的上下文而无需传递DbContextOptionsBuilder
,因为您的自定义构造函数将隐式调用基类中的默认构造函数。 - Jan Muncinsky