«Переходный процесс» в явном виде означает «не разделенный», так что то, что вы просите, является концептуально неправильным. правильное решение состоит в том, чтобы зарегистрировать Shared
в качестве синглтона вместо переходного процесса:
container.Register(Component.For<Shared>());
(Синглтон - время жизни по умолчанию в Виндзоре.)
Однако я подозреваю, что за поставленным вопросом скрывается гораздо более сложная проблема. Я предполагаю, что вам нужно Shared
, чтобы быть временным, потому что он нужен вам в этом образе жизни для многих других случаев, но именно когда речь идет об отношениях между Decorator и Decorated, вам необходимо поделиться ими.
Я все еще думаю, что это звучит как запах дизайна, но есть как минимум два способа добиться этого результата.
Первый вариант предполагает преждевременное разрешение Shared
и явное указание разрешенного экземпляра для конфигурации двух регистраций IFoo:
container.Register(Component.For<Shared>().LifeStyle.Transient);
var r = container.Resolve<Shared>();
container.Register(Component
.For<IFoo>()
.ImplementedBy<Decorator>()
.DependsOn(new { resource = r }));
container.Register(Component
.For<IFoo>()
.ImplementedBy<Decorated>()
.DependsOn(new { resource = r }));
Второй вариант - сделать специальную именованную регистрацию для Shared
, которая используется только регистрациями IFoo:
container.Register(Component.For<Shared>().LifeStyle.Transient);
container.Register(Component.For<Shared>().Named("shared"));
container.Register(Component
.For<IFoo>()
.ImplementedBy<Decorator>()
.ServiceOverrides(new { resource = "shared" }));
container.Register(Component
.For<IFoo>()
.ImplementedBy<Decorated>()
.ServiceOverrides(new { resource = "shared" }));