Не удалось разрешить службу для типа ‘DataAccesssLayer.DataLogic.IRepoDll’ при попытке активировать ‘BusinessAccess.Repo.RepoBll

#c# #asp.net-core

#c# #asp.net-core

Вопрос:

Здесь я использую N-уровневую архитектуру как DLL —> «IRepoDll, RepoDll»,

BLL—>»IRepoBll,RepoBll»,

Модели —> все модели БД,

Режим просмотра —> все ViewModl,

Презентационный слой —> Здесь я использую WebAPI

Здесь МОЯ архитектура UI <=====> Bll<=====> Dll<=====> База данных Пожалуйста, помогите мне, почему я не могу получить доступ к своей Dll в Startup.cs уровня пользовательского интерфейса

     public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    var connection = Configuration.GetConnectionString("DatabaseConnection");

    services.AddScoped<IRepoBll, RepoBll>();
}
 

HomeController

  private readonly IRepoBll Orepo;
        public HomeController(IRepoBll _repo)
        {
            this.Orepo = _repo;
        }
        [HttpGet]
        [Route("MyData")]
        public IEnumerable<Employee> GetData()
        {
            var x = this.Orepo.GetEmployee();
            return null;
        }
 

Код Bll

 public class RepoBll : IRepoBll
    {
        private readonly IRepoDll Orepo;
        public RepoBll(IRepoDll _orepo){
            this.Orepo = _orepo;
        }
        public IEnumerable<Employee> GetEmployee()
        {
            var x = this.Orepo.GetCastRecords();
            return null;
        }
    }
 

Dll-код

 public class RepoDll : IRepoDll
    {
        private readonly DatabaseContext _Context;
        private readonly IConfiguration _configuration;
        public RepoDll(DatabaseContext _Context, IConfiguration configuration)
        {
            this._Context = _Context;
            _configuration = configuration;
        }

        public IEnumerable<Tbl_Cast> GetCastRecords()
        {
            var x = (from n in _Context.Tbl_Cast
                           orderby n.Cast_Id
                           select n).ToList();
            return x;
        }
    }
 

Комментарии:

1. Можете ли вы добавить полный метод ConfigureServices из startup.cs? Не только одна строка services.AddScoped<IRepoBll, RepoBll>();

2. @LinkedListT я обновил свой код как недействительные конфигурационные сервисы (IServiceCollection services)

3. Проблема может быть вызвана тем, что вы разрешаете службу для IRepoBLL, но не зарегистрировали IRepoDLL при запуске. Служба IRepoDLL не внедряется в код BLL public RepoBll(IRepoDll _orepo

4. @linkedlisrT спасибо большое за ваш ценный ответ… После добавления irepodll, repodll в класс startup.cs он работает

5. Круто, я добавлю это в качестве ответа

Ответ №1:

Проблема вызвана тем, что вы разрешаете службу для IRepoBLL, но не зарегистрировали IRepoDLL в Startup.cs. Служба IRepoDLL не внедряется в код BLL public RepoBll(IRepoDll _orepo) . Добавьте это в Startup.cs services.AddScoped<IRepoDll, RepoDll>(); и должно сработать.

Ответ №2:

  • Я думаю, вы можете использовать один из этих процессов внедрения зависимостей, если вы не можете подготовить пользовательский процесс внедрения зависимостей, он будет работать,
  • UnityContainer
  • Замок Виндзор
  • NInject
  • Структурная карта

Комментарии:

1. Это предложение альтернатив, а не ответ на прямую проблему OP.