Задать вопрос

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

Помогите пожалуйста решить мою проблему.
  • Вопрос задан
  • 2590 просмотров
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 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
"но при выборке измененных данных измененное поле с репозитория возвращает старое значение, которое было до изменения. " - возможно создаются разные контексты базы данных, один когда загружаются данные, другой когда данные изменяются.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы