InstancePerDependency
- это путь, когда вам нужны новые экземпляры для каждой зависимости.Теперь иметь разные времена жизни для разных зависимых классов сложно и неправильно.Если вы можете уточнить, почему вам нужно такое поведение, возможно, можно найти лучший способ.
Тем не менее, чтобы выполнить то, что вы просите (хотя мне это не нравится;), вы можете использовать «владельца экземпляра»,Я думаю, что для регулярных зависимостей новые общие экземпляры будут обслуживаться как обычно.Но для особого случая SomeClass
общий экземпляр выбирается из этого класса-держателя, который всегда обслуживает один и тот же экземпляр:
public class CommonHolder
{
public ICommonClass Instance {get;private set;}
public CommonHolder(ICommonClass commonInstance)
{
Instance = commonInstance;
}
}
, а затем настройки регистрации:
builder.RegisterType<CommonHolder>().SingleInstance();
builder.RegisterType<OtherClass>().As<IOtherClass>().InstancePerDependency();
builder.RegisterType<CommonClass>().As<ICommonClass>().InstancePerDependency();
builder.RegisterType<SomeClass>().InstancePerDependency();
builder.Register(c =>
c.Resolve<SomeClass>(TypedParameter.From(c.Resolve<CommonHolder>().Instance)))
.As<ISomeClass>().InstancePerDependency();