【发布时间】:2020-07-14 18:04:07
【问题描述】:
我正在使用 .net 标准类库在现有 ASP.NET MVC Web 应用程序上实现实体框架核心。 我将数据上下文注入到我正在使用的类中,但我还需要一些特定方法调用的静态实现。这里明显的问题是,在静态上下文中,我没有注入的数据上下文。所以我做了以下事情。 这样做的正确方法是什么? 我在库中使用 Ninject 模块将依赖项映射到 Web 项目中的内核。
namespace AppealTrack.Logic.Classes
{
using System;
using System.Collections.Generic;
using System.Linq;
using Common.Entities;
using Data;
using Interfaces;
using Microsoft.EntityFrameworkCore;
public class LookupLogic : ILookupLogic, IDisposable
{
private readonly AppealTrackDataContext _context;
public LookupLogic(AppealTrackDataContext context)
{
_context = context;
}
public List<County> GetCountries(string state)
{
var list = _context.Countries.Where(x => state == null || x.State == state).Distinct().AsNoTracking().ToList();
return list;
}
public void Dispose()
{
}
}
public static class LookupLogicStatic
{
public static List<County> GetCountries(string state)
{
// this is the part that I don't think is correct:
using (var logic = new LookupLogic(new AppealTrackDataContext()))
{
var list = logic.GetCountries(state);
return list;
}
}
}
}
【问题讨论】:
-
公共类 LogicModule : NinjectModule { public override void Load() { Bind
().ToSelf();绑定 ().To ();绑定 ().To ();绑定 ().To ();绑定 ().To ();绑定 ().To ();绑定 ().To (); } } -
你能解释为什么你需要
LookupLogicStatic是静态的吗?如果您使用 DI,则应该将LookupLogic注入消费者类,而不是使用其静态版本。你也能解释一下为什么LookupLogic实现IDisposable吗? Ninject 负责管理对象的生命周期,所以一般来说,您不需要显式地dispose它们。 -
LookupLogic 只实现了 IDisposable,因为我将它包装在 using 中。这是试图为这个问题找到解决方案的副产品。我需要一个静态实现,因为我们将 DevExpress 用于 MVC,并且与它们的控件的一些交互性迫使您使用静态方法。我正在使用 DI,但由于这些 DevExpress 控件,我还必须有一些静态方法。 ninject 是否提供了一种解决静态类/方法的数据上下文构造函数注入的方法?如果是这样,我该怎么做?
标签: asp.net-mvc ninject