我有一个调用静态类的Layout来从数据库中检索一些信息,但是我正在将项目迁移到使用实体框架核心,但是你知道我需要将一个实例参数传递给EF Core来实例化它现在,所以我已经将静态类更改为非静态类,但当然现在它正在抱怨因为我从布局中使用静态签名调用该类,并从布局中调用它我需要传递该实例参数,所以我需要在Layout中创建一个类来检索它吗?我不认为我会这样做..我该怎么办?欢迎提出任何建议。
这是类(我已经改为实例类,以便拥有实例构造函数,但现在我需要从Layout视图更改签名,将其作为带有instance参数的实例类调用...) :
public class LocationLookup
{
DataContext context;
public LocationLookup(IOptions<DBConnection> connectionsAccessor)
{
context = new DataContext(connectionsAccessor);
}
public static List<MyLocations> GetLocations()
{
var locations = context.MyLocations.OrderBy(x => x.Name).ToList();
return locations;
}
}
这就是我当前正在调用该方法的方法(我需要更改它以将其称为实例类,但如何检索connectionsAccessor
实例参数?我在{{1}观点)
Layout.cshtml
欢迎任何有关更好方法的建议
答案 0 :(得分:2)
您最好的选择是直接在视图中注入服务。
首先将您的LocationLookup
转变为直接依赖于DbContext
的服务:
public class LocationLookupService
{
private readonly DataContext _context;
public LocationLookupService(DataContext context)
{
_context = context;
}
public List<MyLocations> GetLocations()
{
var locations = _context.MyLocations.OrderBy(x => x.Name).ToList();
return locations;
}
}
在DI引擎中注册:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<DataContext>( <!-- your code --> );
services.AddMvc();
services.AddScoped<LocationLookupService>();
}
现在你准备将它注入你的观点中了:
@inject LocationLookupService LocationLookup
@{
var locations = LocationLookup.GetLocations();
}