Я зарегистрировал экземпляр службы в Calibrurn's BootStrapper's Configure(), и он вводит правильно.Как обновить регистрацию Caliburn SimpleContainer IoC во время выполнения
public class AppBootstrapper : BootstrapperBase
{
private SimpleContainer _container;
// ...
// other overridden functions
// ...
protected override void Configure()
{
_container = new SimpleContainer();
// ...
// window manager, event aggregator etc..
// ...
if (_runInDemoMode)
{
// run in demo mode against a mock service
_container.Instance<IMyService>(new MyServiceMock());
}
else
{
// run with the real service implementation
_container.Instance<IMyService>(new MyService());
}
}
}
Я хотел бы иметь возможность обновить регистрацию правил зависимости от в ViewModel во время выполнения, так что пользователь может переключаться между реальной реализацией моей службы и макетом реализацией без необходимости перезапуска приложения.
E.g.
public class SettingsViewModel : PropertyChangedBase
{
// ...
// code
// ...
public void ChangeToDemoMode()
{
var container = IoC.GetContainer(); // <-- I made this up, how to do this?
container.UnregisterHandler(typeof(MyService), key?); // <-- I don't know what the key would be
container.Instance<IMyService>(new ServiceMock());
}
}
Как вы можете видеть, что я не знаю, как получить ссылку на контейнер для того, чтобы возиться с ним, и я не знаю, как отменить существующую регистрацию после того как я сделать ссылку на контейнер , Есть ли способ сделать это или он будет разорвать ткань континуума IoC?