2010-10-24 7 views
4

Comment créer une classe de fabrique qui empêche l'instanciation directe d'une classe? Par exemple, j'ai un commentaire de classe qui ne devrait être instancié qu'à partir d'une classe CommentFactory. Je ne veux pas que le commentaire puisse être instancié directement.classe de fabrique qui empêche l'instanciation directe

Je pensais que je pouvais le faire:

public partial class Comment 
    { 
    private Comment(){} 
    public Comment CreateComment(User user,string str) 
    { 
     Comment cmt=new Comment(); 
     user.AddComment(cmt); 
     cmt.User=user; 
     return cmt;  
    } 
    } 

est ce code propre?

maintenant, le problème auquel je suis confronté est que le commentaire est une classe partielle avec une implémentation partielle effectuée par Linq à SQL. et Linq to SQL crée un constructeur public de cette classe, alors comment puis-je contourner cela? Y a-t-il un «truc»?

Répondre

0

Ce que vous demandez peut être répondu here. Ce n'est pas exactement la même chose, mais les solutions seront presque identiques.

Je me dis qu'il y a au moins 3 astuces pour résoudre votre question, donc cela ajoutera plus de flexibilité pour vous.

0

Si comment et CommentFactory se trouvent dans le même assembly, la création de tous les constructeurs de Comment internal empêchera tout code en dehors de l'assembly de créer des instances de comment.

+0

Oui, le code que je ne veux pas accéder au constructeur Comment se trouve dans le même assemblage. créer un autre assembly dois-je créer un nouveau projet dll? – Attilah

+0

oui, si vous créez un nouveau projet dll, tout code dans ce projet ne serait pas capable de créer des instances de commentaires tant que les constructeurs de Commentaire sont 'internal'. –

0

Vous pouvez marquer le constructeur internal dans un assembly dans lequel se trouve CommentFactory, puis autoriser les consommateurs à accéder à la classe CommentFactory. Je ne suis pas sûr de savoir comment l'appliquer.

Questions connexes