У меня есть класс T
и фабрика TFactory
, которая создает объекты типа T
.Я хочу убедиться, что только фабрике разрешено создавать новые T
объекты.
Половинчатым решением будет требование фабрики в качестве параметра в конструкторе T
, с единственной целью, котораятолько тот, кто хотя бы принес фабричный объект, может создать T
:
class T
{
public T(TFactory Tf)
{
if (!(Tf is TFactory))
throw new InvalidOperationException("No factory provided");
}
}
Но там, где под рукой TFactory
, можно построить T
.Другой подход заключается в проверке через трассировку стека, если вызов конструктора действительно поступил из TFactory, но это кажется мне излишним.
Третий подход - поместить в сборку и 1016 *, и TFactory.объявление make T
конструктор internal
.Но новый проект и сборка как раз для этой цели?
Кто-нибудь может быть лучше?(Хотя мой код C #, это, вероятно, более общий вопрос)