Я пытаюсь получить экземпляр Singleton, работающий с Autofac. Я вроде как делаю квази-mvvm типа с Winforms, просто эксперимент, поэтому не получится повесить на это. Но я пытаюсь вас есть моя модель будет один экземпляр со ссылкой на команду (ICommand здесь не разнообразие WPF):Autofac SingleInstance не работает
У меня есть следующие установки контейнера:
var cb = new ContainerBuilder();
cb.RegisterType<CalculateCommissionCommand>().As<ICommand<TradeEntry>>().SingleInstance();
cb.RegisterType<CalculationsModel>().As<ICalculationsModel>().SingleInstance();
cb.Register(c => new CalculationsView() { Model = c.Resolve<ICalculationsModel>() }).SingleInstance();
cb.Build();
Теперь Команда принимает ICalculationsModel в качестве параметра конструктора. Однако, когда я устанавливаю значение в Модели, передаваемой команде, это значение не появляется в модели, которая уже была установлена с помощью CalculationsView. Кажется, что команде и представлению передаются разные экземпляры CalculationsModel, несмотря на вызов метода singleInstance. Я что-то упускаю? Почему это происходит?
Когда я немного разбираюсь и ставил статический счетчик с локальным автоматически увеличивающимся экземпляром поля, я вижу, что на самом деле autofac создает новые экземпляры каждый раз. Экземпляр, передаваемый в представление, имеет ID = 1, а экземпляр, переданный команде, равен ID = 2. Это может произойти только в том случае, если конструктор вызывался дважды. Что дает? Autofac не может быть сломанным? – Bitfiddler
Положите точку останова в конструкторе и посмотрите, действительно ли это происходит дважды. – jlew
Да. Конструктор вызывается дважды. – Bitfiddler