#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.