Я столкнулся с проблемой, из-за которой объект, инициализированный с помощью IoC ( CastleWindsor ) в MainViewModel , становится пустым, как только я нажимаю кнопку в форме WPF.
У меня есть этот код в MainWindow.xaml.cs
var iocContainer = WindContainer.WindsorContainer;//This is IoCcontainer and working okay
iocContainer.Install(new IoCInstaller());
var mainWindowViewModel = iocContainer.Resolve<MainWindowViewModel>("MainWindowViewModel");
mainWindowViewModel.Initialize(iocContainer);
DataContext = mainWindowViewModel;
и метод Initialize () в MainWindowViewModel выглядит следующим образом:
public void Initialize(WindsorContainer windsorContainer)
{
Logger.Debug("Initializing main view model");
iocContainer = windsorContainer;
myManager = iocContainer.Resolve<IMyManager>("MyManager");
_dataManager = iocContainer.Resolve<IDataManager>("DataManager");
_dataManager.Initialize();
}
Все работает нормально, но когда я нажимаю кнопку и выполняю команду в этот момент, iocContainer, _dataManager и myManager становятся равными нулю. Следующий код также находится в MainWindowViewModel.
private ICommand _clickCommandForBttnA;
public ICommand ClickCommandForBttnA
{
get
{
return _clickCommandForBttnA ?? (_clickCommandForBttnA = new CommandHandlerForBttnA(() => MyActionForBttnA(), _canExecute));
}
}
public void MyActionForBttnA()
{
Logger.Debug("Option A is clicked");
if (_dataManager.SomeData.Equals("myData"))//Here _dataManager is null after clicking button
{
BackgroundColorBttnA = Colors.Blue;
BackgroundColorBttnB = _allButtonInitialColor;
BackgroundColorBttnC = _allButtonInitialColor;
BackgroundColorBttnD = _allButtonInitialColor;
BackgroundColorBttnConfirm = _allButtonInitialColor;
}
}
Командный обработчик для кнопки
public class CommandHandlerForBttnA : ICommand
{
private Action _action;
private bool _canExecute;
public CommandHandlerForBttnA(Action action, bool canExecute)
{
_action = action;
_canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return _canExecute;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
_action();
}
}
Есть причина / предложение, почему это происходит?