У меня есть ситуация, когда класс (Parent
) имеет зависимость (IScopedInstance
), а также динамически разрешает другой интерфейс (IOtherDependency
) внутри метода. Реализация этого интерфейса (Dependency
) имеет ту же зависимость, что и исходный класс. Я хочу, чтобы этот экземпляр был привязан к экземпляру Parent
т. Parent
Я хочу, чтобы один и тот же экземпляр внутри Parent
и Dependency
, но только если зависимость была разрешена изнутри Parent
я использую Castle.Windsor как DI-контейнер.
public class Parent : IParent
{
public Parent(IScopedInstance instance)
{
}
public void DoSomething()
{
var anotherDependency = container.Resolve<IOtherDependency>();
}
}
public class Dependency : IOtherDependency
{
public Dependency(IScopedInstance instance)
{
}
}
Это работает, когда IOtherDepedency
вводится в конструктор Parent
:
container.Register(Component
.For<IScopedInstance>()
.ImplementedBy<ScopedInstance>()
.LifestyleBoundTo(x => x.First(xx =>
xx.ComponentModel.Implementation.InheritsOrImplements(typeof(IParent)))));
Но, по понятным причинам, это не сработает, если разрешить его изнутри метода, так как там нет IParent
в графике зависимостей (это новый график).
Реальный случай использования немного отличается, и я не напрямую разрешаю IOtherDependency
внутри метода, но я удалил всю дополнительную информацию, которая не нужна.
есть идеи как это сделать?
Прежде всего, вы закупаете фабрику, скорее всего, типичную фабрику, в вашем методе, чтобы получить экземпляр из контейнера. Я предполагаю, что образцовый образ жизни должен соответствовать вашим потребностям или переработанный образ жизни, если код работает в веб-приложении.