I have a class T and a factory TFactory that creates objects of type T. I want to make sure that only the factory is allowed to create new T objects.
A halfhearted solution would be to require the factory as a parameter in T's constructor, for the only purpose that only somebody who at least brings a factory object can create T's:
class T
{
public T( TFactory Tf )
{
if( !(Tf is TFactory) )
throw new InvalidOperationException( "No factory provided" );
}
}
But wherever a TFactory is at hand, one could construct T's. Another approach would be to check via stack tracing, if the constructor call really came from within a TFactory, but this seems overkill to me.
A third apporach would be to put both T and TFactory in an assembly of their own, ad make T's constructor internal
. But a new project and assembly just for this purpose?
Any better idea anybody? (Although my code is C#, this is probably a more general question)
Aucun commentaire:
Enregistrer un commentaire