Я собираюсь внедрить шаблон репозитория в мое основное приложение asp.net mvc, для этого я пробую свои силы в простом демонстрационном приложении, которое включает в себя репозиторий и концепцию Unit of Work. Мой первый репозиторий
public interface ICustomerRepository
{
bool Add();
bool Update();
bool Delete();
}
и
public class CustomerRepository:ICustomerRepository
{
public bool Add()
{
return true;
}
public bool Update()
{
return true;
}
public bool Delete()
{
return true;
}
}
Второй репозиторий
public interface IOrderRepository
{
bool Add();
bool Update();
bool Delete();
}
и
public class OrderRepository:IOrderRepository
{
public bool Add()
{
return true;
}
public bool Update()
{
return true;
}
public bool Delete()
{
return true;
}
}
IUnit Of Work
public interface IUnitOfWork
{
IOrderRepository Order {get;}
ICustomerRepository Customer { get; }
void Save();
void Cancel();
}
и
public class UnitOfWork:IUnitOfWork
{
public UnitOfWork(IOrderRepository order, ICustomerRepository customer)
{
Order = order;
Customer = customer;
}
public IOrderRepository Order { get; }
public ICustomerRepository Customer { get; }
public void Save() { }
public void Cancel() { }
}
А в моем контроллере
public class HomeController : Controller
{
IUnitOfWork UW { get; }
public HomeController(IUnitOfWork uw)
{
UW = uw;
}
public IActionResult Index()
{
UW.Customer.Add();
UW.Order.Update();
UW.Save();
return View();
}
}
добавлюПозже будет написано больше кода, но по крайней мере он должен работать без каких-либо ошибок, но он дает мне ошибку
InvalidOperationException: невозможно разрешить службу для типа 'CoreTS.Repository.UnitOfWork.IUnitOfWork' при попыткеактивировать 'CoreTS.Controllers.HomeController'.
Кто-то предложил мне добавить IUnitOfWork в качестве службы в startup.cs в методе ConfigureService, как
services.AddSingleton<IUnitOfWork, UnitOfWork>();
и после добавления этой ошибки
InvalidOperationException: невозможно разрешить службу для типа 'CoreTS.Repository.Order.IOrderRepository' при попытке активировать 'CoreTS.Repository.UnitOfWork.UnitOfWork'.
Комузаставить его работать, я должен был также добавить два других хранилищав файле startup.cs также
services.AddSingleton<IOrderRepository, OrderRepository>();
services.AddSingleton<ICustomerRepository, CustomerRepository>();
Если в репозитории будет n номеров, то я должен добавить все из них в файле startup.cs (согласно этому коду), каково решение для этого.
Итак
1.] Что означают эти ошибки?
2.] Какая здесь будет правильная конфигурация?
3.] Как можно не добавлять n номер репозитория в качестве службы здесь?
Примечание. Как уже упоминалось, это просто для понимания последовательности шаблонов, я будудобавить код для Dapper или EF Core позже в этом