Если у меня есть набор классов родительский, дочерний, внучатый, для которого внуку требуется родительский параметр в качестве параметра конструктора, есть ли способ использовать вложенное Инициализаторы объекта объявление?
Например, рассмотрим заголовок счета-фактуры, строку счета-фактуры, разбивку строки счета-фактуры:
public class InvoiceHeaderModel
{
public List<InvoiceLineModel> InvoiceLineModels { get; set; }
}
public class InvoiceLineModel
{
public List<InvoiceLineBreakdown> InvoiceLineBreakdowns { get; set; }
}
public class InvoiceLineBreakdown
{
public InvoiceLineBreakdown(InvoiceLineModel parentInvoiceLine)
{
_parentInvoiceLine = parentInvoiceLine;
}
private InvoiceLineModel _parentInvoiceLine;
}
Я хотел бы иметь возможность сделать следующее:
public InvoiceHeaderModel BuildAnInvoice()
{
return new InvoiceHeaderModel
{
InvoiceLineModels = new List<InvoiceLineModel>
{
new InvoiceLineModel
{
InvoiceLineBreakdowns = new List<InvoiceLineBreakdown>
{
new InvoiceLineBreakdown(/* Need to reference the anonymous outer InvoiceLineModel*/),
new InvoiceLineBreakdown()
}
}
}
};
}
Но я не могу, так как конструктору InvoiceLineBreakdown
нужна ссылка на анонимный InvoiceLineModel
, который его содержит.
Я ценю, что есть хорошие аргументы для того, чтобы не ссылаться на родителей из детей, но есть лиспособ достижения вложенного объявления выше с использованием Object Initializer], или мне просто нужно явно объявить все объекты и затем составить заголовок Invoice впоследствии?