ASP.NET + Проблемы с Ninject. Обновленные данные не обновляются в DBContext. Где ошибка?

Доброго времени суток.
Столкнулся со специфичной проблемой на мой взгляд.

Описание проблемы:
Сайт работает на ASP.NET MVC, с использованием Ninject, запросы к базе осуществляются через асинхронные запросы.

Существует Repository с интерфейсом IRepository, UnitOfWork с IUnitOfWork, IDatabaseFactory с DataBaseFactory и сервисы которые работают с репозиториями

Все это дело соединяться через Ninject:

Bind<IUnitOfWork>().To<UnitOfWork>().InSingletonScope();
            Bind<IDatabaseFactory>().To<DatabaseFactory>().InSingletonScope();

            this.Bind(x => x
                .From(typeof (UserRepository).Assembly)
                .SelectAllClasses().InNamespaceOf(typeof (UserRepository))
                .EndingWith("Repository")
                .BindAllInterfaces()
                .Configure(b => b.InSingletonScope()));

            this.Bind(x => x
                .From(typeof (UserService).Assembly)
                .SelectAllClasses().InNamespaceOf(typeof (UserService))
                .EndingWith("Service")
                .BindAllInterfaces()
                .Configure(b => b.InSingletonScope()));


Вся работа построена по следующему образу:
Запрос поступает в Контроллер с котроллера в сервис в котором инициализируется IRepository и IUnitOfWork
Сервис получает данные с репозитория асинхронно.
При добавлении/обновлении данных сервис отправляет данные в репозиторий и после этого в сервисе вызывается коммит через юнитОфВорк

Проблема:
Заметил странную особенность что когда я произвожу обновления записи через сервис, запись обновляется в базе данных, но при выборке измененных данных измененное поле с репозитория возвращает старое значение, которое было до изменения. Если проект перебилдить то при обновлении страницы подгрузятся данные свежие (корректные) из базы, но при повторном обновлении проблема сохраняется.

Что-то мне подсказывает что проблема в настройке Ninject

Помогите пожалуйста решить мою проблему.
  • Вопрос задан
  • 2587 просмотров
Пригласить эксперта
Ответы на вопрос 2
@tuxcod Автор вопроса
Нашел решение этой проблемы удалил Ninject и установил AutoFac - все работает отлично.

Сразу выкладываю кусок по настройке AutoFac, вдруг кто-то столкнется с такой-же проблемой:

1. Установить nuget пакет AutoFac и AutoFac API
2. Добавить в Global.asax функцию настройки
private void RegisterIOC()
        {
            var builder = new ContainerBuilder();
            builder.RegisterControllers(typeof(MvcApplication).Assembly);
            builder.RegisterApiControllers(typeof(MvcApplication).Assembly);
            Core.AutofacConfiguration.Init(builder);
            builder.RegisterFilterProvider();
            var container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
            GlobalConfiguration.Configuration.DependencyResolver = new Autofac.Integration.WebApi.AutofacWebApiDependencyResolver(container);
        }


3. Создать файл конфигурации AutoFac, назовем его AutofacConfiguration, и прописываем имплементации интерфейса к классу:
public static class AutofacConfiguration
    {
        public static void Init(ContainerBuilder builder)
        {
           //Пример настройки
            builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerLifetimeScope();

        }

    }


4. В Application_Start добавить инициализацию функции
RegisterIOC();
Ответ написан
Комментировать
@Pavel_Develop
"но при выборке измененных данных измененное поле с репозитория возвращает старое значение, которое было до изменения. " - возможно создаются разные контексты базы данных, один когда загружаются данные, другой когда данные изменяются.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы