С Castle Windsor, скажем, у меня есть следующие классы:
public class LowLevelComponent
{
}
public class HighLevelComponent
{
readonly LowLevelComponent LowLevelComponent;
public HighLevelComponent(LowLevelComponent lowLevelComponent)
{
LowLevelComponent = lowLevelComponent;
}
}
public class ComponentBeingResolved
{
readonly LowLevelComponent LowLevelComponent;
readonly HighLevelComponent HighLevelComponent;
public ComponentBeingResolved(LowLevelComponent lowLevelComponent,
HighLevelComponent highLevelComponent)
{
LowLevelComponent = lowLevelComponent;
HighLevelComponent = highLevelComponent;
}
}
Зарегистрировано самым простым способом:
container.Register(Component.For<LowLevelComponent>());
container.Register(Component.For<HighLevelComponent>());
container.Register(Component.For<ComponentBeingResolved>());
Я бы хотел, чтобы один и тот же экземпляр LowLevelComponent
использовался во всех зависимостях каждый раз, когда я вызываю Resolve .
Итак, после этих звонков:
var instance1 = container.Resolve<ComponentBeingResolved>();
var instance2 = container.Resolve<ComponentBeingResolved>();
Следующие утверждения должны быть верными:
instance1.LowLevelComponent == instance1.HighLevelComponent.LowLevelComponent
instance1.LowLevelComponent != instance2.LowLevelComponent
instance1.HighLevelComponent != instance2.HighLevelComponent
Я также возьму "вы делаете все неправильно, это то, что вы должны сделать вместо этого" в качестве ответа: -)