UnitOfWork + Шаблон репозитория - PullRequest
0 голосов
/ 24 октября 2018

У меня очень странная ситуация.У меня есть шаблон репозитория UOW.У меня есть слой домена, в котором находятся мои сущности, слой доступа к данным, который содержит dbcontext (UnitofWork) и репозитории для разных сущностей.У меня есть прикладной уровень, где у меня есть сервисы, к которым я обращаюсь для чтения и записи данных.Архитектура содержит в основном это с некоторыми DTO для обеспечения согласованности данных.У меня есть уровень пользовательского интерфейса с MVC5, где я внедрил все зависимости через Unity, и он прекрасно работает, если я создаю экземпляр каждой службы из конструктора контроллера.

У меня есть несколько служб, таких как GlobalAppSvc (реализовано из IGlobalAppSvc), SystemSettingAppSvc (ISystemSettingAppSvc) и т. Д. И т. Д. Чтобы упростить жизнь, я создал такой класс под названием ApplicationManager, как этот.

 public class ApplicationManager
{
    public ApplicationManager(ISystemSettingAppSvc systemSettingAppSvc, IBalanceAppSvc balanceAppSvc, IGlobalAppSvc globalAppSvc, IProfileAppSvc profileAppSvc)
    {
        SystemSettingAppSvc = systemSettingAppSvc;
        BalanceAppSvc = balanceAppSvc;
        GlobalAppSvc = globalAppSvc;
        ProfileAppSvc = profileAppSvc;
    }
    public ISystemSettingAppSvc SystemSettingAppSvc { get; set; }
    public IBalanceAppSvc BalanceAppSvc { get; set; }
    public IGlobalAppSvc GlobalAppSvc { get; set; }
    public IProfileAppSvc ProfileAppSvc { get; set; }
}

В моем Unity я зарегистрировал все службы и хранилища вместе с единицей работы

container.RegisterType<IUnitOfWork, WUnitOfWork>(new PerResolveLifetimeManager(), new InjectionConstructor());
container.RegisterType<IWUnitOfWork, WUnitOfWork>(new PerResolveLifetimeManager(), new InjectionConstructor());

Я создал BaseController, расширив Controller так, чтобы яне нужно разрешать диспетчер приложений в каждом контроллере, который я пишу.В базовом контроллере я разрешаю это ApplicationManager как

public class BaseController : Controller
{
    // GET: Base
    public ApplicationManager ApplicationManager
    {
        get;
        private set;
    }

    public BaseController()
    {

        ApplicationManager = UnityConfig.Container
            .Resolve<ApplicationManager>(); 
    }
}

Затем я могу войти в любой контроллер и расширить контроллер с помощью этого BaseController, и у меня есть доступ к ApplicationManager.GlobalAppSvc.Methods()...

Моя проблема заключается в том, что всякий раз, когда происходит изменение данных, например, допустим, есть действие, которое выполняется для вычета баланса и сохранения изменений для конкретного пользователя.Когда я снова запрашиваю баланс пользователя, он все еще показывает неизменный баланс, однако баланс в базе данных вычитается, но служба не получает обновленные данные.Что я делаю неправильно?

1 Ответ

0 голосов
/ 25 октября 2018

Похоже, решение состоит в том, чтобы BalanceAppSvc был зарегистрирован в Unity, как таковой:

ApplicationManager=UnityConfig.Container.Resolve<ApplicationManager>(); and registering types as container.RegisterType<IBalanceAppSvc, BalanceAppSvc>(new PerResolveLifetimeManager());
...