gpt4 book ai didi

c# - SQLDependency with DI

转载 作者:太空宇宙 更新时间:2023-11-03 12:27:30 27 4
gpt4 key购买 nike

我想在我的项目中使用 SQLDependency 和依赖注入(inject)。这是我的代码

public interface IAreaRepository
{
string GetAreaQuery();
List<Area> GetAreas();
}

public class AreaRepository: IAreaRepository
{
public AreaRepository(DbContext dbContext)
{
_dbContext = dbContext;
}

public string GetAreaQuery()
{
return _dbContext.Areas.ToString();
}

public string GetAreas()
{
return _dbContext.Areas.ToList();
}
}

这是我的课

public class AreaDataProvider
{
private readonly AreaRepository _areaRepository;
public AreaDataProvider(IAreaRepository areaRepository)
{
_areaRepository = areaRepository;
}

public void RegisterForNotification()
{
var connectionString = WebConfigurationManager.AppSettings["ConnectionString"];
using (var connection = new SqlConnection(connectionString))
{
var areaQuery = _areaRepository.GetAreaQuery(); // Line 1
connection.Open();
using (var oCommand = new SqlCommand(areaQuery, connection))
{
// Starting the listener infrastructure...
SqlDependency.Start(connectionString);

var oDependency = new SqlDependency(oCommand);
oDependency.OnChange += OnNotificationChange;

var reader = oCommand.ExecuteReader();
}
}

private void OnNotificationChange(object sender, SqlNotificationEventArgs e)
{
// Area Table has changed, Get the latest state from Db
var areas = _areaRepository.GetAreas(); // Line 2
RegisterForNotification();
}
}

现在我的问题是如何调用初始化 AreaDataProvider,因为如果我通过 DBContext 传递 IAreaRepository,如下所示。

using (AppContext context = new AppContext())
{
AreaDataProvider provider = new AreaDataProvider(new AreaRepository(context));
provider.RegisterForNotification();
}

我的 DbContext 在第 1 行和第 2 行会有所不同。跨 AreaDataProvider 类实现单个 DbContext 的最佳方法是什么。

最佳答案

DbContext will be different in Line 1 and 2.

不,不会的。它将与传递给构造函数的 AreaRepository 相同。

关于c# - SQLDependency with DI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44117887/

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