Ваша первая конфигурация очень похожа на вторую, но она отличается при разрешении IComponentContext
.
Позвольте мне немного перестроить вашу первую конфигурацию без изменения логики.
builder.Register<ServiceFactory>(x =>
{
return y => x.Resolve<IComponentContext>().Resolve(y)
});
В первом примере вы регистрируете лямбду, которая
Возвращает лямбда, которая:
1.1 Разрешить IComponentContext
1.2 Вызовите разрешение для экземпляра IComponentContext и верните результат
Давайте сравним это со второй конфигурацией.
builder.Register<ServiceFactory>(x => {
IComponentContext context = x.Resolve<IComponentContext>();
return y => context.Resolve(y);
});
Во втором примере вы регистрируете лямбду, которая
Разрешить IComponentContext и назначить его переменной 'context'
Возвращает лямбду, которая захватывает контекст переменной, и:
2.1 Вызовите Resolve в контексте переменной и верните результат
Так что он отличается на момент разрешения IComponentContext.