2016-10-18 14 views
0

Итак, у меня есть контейнер, в который я добавляю реестр, который определяет тип по умолчанию для класса.Как настроить регистрацию переопределения в Structuremap 4.4

TestRegistry : Registry{ 
    For<Foo>.Use<Foo>(); 
} 

этот реестр добавляется в начале веб-службы во время инициализации приложения. сразу после добавления всех моих реестров, используемых для приложения, мне нужно переопределить регистрацию класса Foo. Итак:

Container.Instance.Configure(x => 
{ 
    x.AddRegistry<TestRegistry>(); 
    var fooInstance = new Foo(); 
    x.For<Foo>.Use(fooInstance); 
} 

Когда я иду, чтобы получить этот экземпляр из моего контейнера

var fromContainer = Container.Instance.GetInstance<Foo>(); 

я теперь получаю обратно null. если я использую все экземпляры:

var fromContainer = Container.Instance.GetAllInstances<Foo>(); 

Я верну два результата. Один для каждой регистрации. Это имеет смысл.

Однако, если я пытаюсь очистить регистрации во второй регистрации:

Container.Instance.Configure(x => 
{ 
    x.AddRegistry<TestRegistry>(); 
    var fooInstance = new Foo(); 
    x.For<Foo>.ClearAll().Use(fooInstance); 
} 
var fromContainer = Container.Instance.GetInstance<Foo>(); 

Это все равно возвращается null. Кажется, у меня что-то не хватает. Я ожидаю, что это очистит все регистрации Foo и воспользуется экземпляром, который я зарегистрировал последним.

Любая помощь будет оценена по достоинству. Заранее спасибо!

ответ

0

Ну, я нашел свой ответ. Похоже, что только Container.Instance не содержит определения до тех пор, пока метод конфигурации не будет завершен. Это означает, что для переопределения реализации вам потребуется позвонить Container.Instance.Configure() во второй раз с переопределением. Как только я это сделал, он начал работать так, как ожидалось.