ninject с datacontext и необходимостью реализации stati c в MVC - PullRequest
0 голосов
/ 02 апреля 2020

Я использую стандартную библиотеку классов. net для реализации ядра Entity Framework в существующем веб-приложении ASP. NET MVC. Я внедряю контекст данных в используемые мной классы, но мне также нужна реализация stati c для некоторых специфических c вызовов методов. Очевидная проблема здесь заключается в том, что в контексте stati c у меня нет введенного контекста данных. поэтому я сделал следующее. Как правильно это сделать? Я использую модуль Ninject в библиотеке для сопоставления зависимостей с ядром в веб-проекте.

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;
            }
        }
    }
}

1 Ответ

0 голосов
/ 03 апреля 2020

Если вам требуется метод stati c GetCountries, то вы мало что можете сделать ... вам нужно управлять областью действия DbContext для этого метода, так как конструктор stati c не принимает любые аргументы. Ваш LookupLogic не имеет , чтобы быть Disposable, хотя (это может быть, если вы хотите).

Если вам требуется метод stati c, то у вас нет чтобы добавить новый класс stati c, вы можете добавить метод stati c к LookupLogic:

public class LookupLogic : ILookupLogic
{
    private readonly AppealTrackDataContext _context;

    public LookupLogic(AppealTrackDataContext context)
    {
        _context = context;
    }

    public List<Country> GetCountries(string state)
    {
        return GetCountries(_context, state);
    }

    public static List<Country> GetCountriesStatic(string state)
    {
        using (var dbContext = new AppealTrackDataContext())
        {
            return GetCountries(dbContext, state);
        }
    }

    private static List<Country> GetCountries(AppealTrackDataContext dbContext, string state)
    {
        return dbContext.Countries.Where(x => state == null || x.State == state).Distinct().AsNoTracking().ToList();
    }
}
...