Как обычно, это зависит.
Если вы хотите выразить тот факт, что MainClass
преднамеренно требует того же экземпляра Report
, что и экземпляр SecondaryClass
, то вы должны либо взять Report
из SecondaryClass
, поскольку @adrift имеет предлагается в комментариях или использовать параметризацию:
public class MainClass
{
public delegate MainClass Factory();
public MainClass(Report report, Func<Report, SecondaryClass> secClassFactory)
{
Report=report;
SecondaryClass = secClassFactory(report);
}
public Report Report {get; private set;}
public SecondaryClass SecondaryClass {get; private set;}
}
public class SecondaryClass
{
public SecondaryClass(Report report)
{
Report=report;
}
public Report Report {get; private set;}
}
( см. Ссылку на вики-автофак )
С этими подходами вы прямо показываете, что вам требуется, чтобы два объекта использовали один и тот же Report
.
Если ваши SecondaryClass
и MainClass
не заботятся о том, используют ли они один и тот же Report
, и вы просто хотите, чтобы они поделились им, вы можете использовать отдельную область действия, как предложил @adrift. Но имейте в виду, что если вы используете другие компоненты, которые зависят от Report
, они также получат тот же экземпляр внутри этой области действия. Это будет своего рода синглтон внутри прицела.
Я не рекомендую использовать область действия, если ваши компоненты зависят от использования одного и того же экземпляра. Если бы вы это сделали, требование было бы запутано, что плохо.