В экземпляре объекта не задана ссылка на объект. Интерфейс C # - PullRequest
0 голосов
/ 26 августа 2018

Я знаю, что этот вопрос задавался довольно много раз, и я знаю причину, по которой я получаю ошибку, потому что LicenseInfoRepository имеет значение NULL, но я не уверен, как это исправить.

public abstract class VendorCodeGeneratorBase
{

    protected ILicenseInfoRepository LicenseInfoRepository;
    protected ICountryRegionRepository CountryRegionRepository;
    protected IEnumerable<IBrandModel> BrandModels;

    protected string GenerateVendorCodeUnEncoded(GenerateVendorCodeRequestModel requestModel)
    {
        int formatId = requestModel.VendorCodeFormat;
        var strToConvert = "";
        var brandBytes = new byte[5];
        var brands = LicenseInfoRepository.GetSubscriptionBrandsForVendorCode(requestModel.KeyNumber);

Ошибка происходит на линии

var brands = LicenseInfoRepository.GetSubscriptionBrandsForVendorCode(requestModel.KeyNumber);

Я не знаю, как создать экземпляр класса, реализующего интерфейс. Это класс

public class LicenseInfoRepository : ILicenseInfoRepository
{
    private readonly IEstDbContext _estDbContext;

    public LicenseInfoRepository(IEstDbContext estDbContext)
    {
        _estDbContext = estDbContext;
    }

    public List<VendorCodeSubscriptionBrandModel> 
    GetSubscriptionBrandsForVendorCode(int keyNumber)
    {
        return _estDbContext.SubscriptionBrands
            .Include(sb => sb.Brand)
            .Where(sb => sb.KeyNumber == keyNumber)
            .ProjectTo<VendorCodeSubscriptionBrandModel>()
            .ToList();
    }
}

У меня есть папка с именем repositories, внутри которой находится класс LicenseInfoRepository.cs, а внутри находится папка с именем Interfaces, которая имеет интерфейс ILicenseInfoRepository.cs. Этот интерфейс выглядит следующим образом:

namespace Data.Repositiories
{
    public interface ILicenseInfoRepository
    {
        List<VendorCodeSubscriptionBrandModel> 
GetSubscriptionBrandsForVendorCode(int keyNumber);
    }
}

1 Ответ

0 голосов
/ 26 августа 2018

В той же папке, где у вас есть LicenseInfoRepository.cs, вам нужен класс интерфейса ILicenseInfoRepository.cs:

using System;
using System.Collections.Generic;
using System.Data;
using System.Web.Mvc;
// Add/remove as appropriate

namespace YourProject.DAL // Change to your project / repository folder name
{
    public interface ILicenseInfoRepository : IDisposable
    {
        List<VendorCodeSubscriptionBrandModel> GetSubscriptionBrandsForVendorCode(int keyNumber);
        // Add any other methods that exist in LicenseInfoRepository.cs file
    }
}

В вашем классе VendorCodeGeneratorBase могут отсутствовать строки, особенно то, как вы обычно создаете экземпляр private ApplicationDbContext db = new ApplicationDbContext();. После добавления интерфейса, пожалуйста, поделитесь ошибками / деталями, чтобы мы могли продолжить исправление вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...