我想在我的项目中使用SQLDependency和Dependency Injection。这是我的代码
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的最佳方法是什么。
答案 0 :(得分:1)
DbContext在第1行和第2行中会有所不同。
不,不会。它将与传递给构造函数的AreaRepository相同。