2010-10-18 3 views
0

J'utilise NHibernate + Castle.Windsor pour ajouter un peu de comportement à mes entités. Cela signifie que NHibernate crée des entités via Windsor. Cela signifie que je dois avoir un constructeur vide par défaut afin que Windsor puisse instancier mes entités. Je n'aime pas cela pour plusieurs raisons, la principale étant que je n'aime pas avoir des objets dans un état instable.Castle.Windsor: Type de résolution avec constructeur protégé vide

Est-il possible d'instancier une entité sans constructeur public sans paramètre?

Plus d'informations: J'ai essayé d'utiliser un activateur personnalisé pour mes entités mais cela ne fonctionne pas puisque Windsor émet une exception lorsqu'il détecte qu'il n'y a aucun moyen de résoudre les dépendances, donc il souffle avant d'utiliser mon activateur.

Certains code:

public class Product 
{ 
    public string Name { get; set; } 
    public Product(string name) 
    { 
     Name = name; 
    } 
    protected Product() { } 
} 

Supposons que je l'entité ci-dessus: Si je tente de résoudre cette entité par Windsor il jette une exception en me disant que le produit attend certaines dépendances qui ne sont pas enregistrées. Si j'utilise NHibernate seul, tout fonctionne correctement. Donc, fondamentalement, j'essaie d'imiter le comportement de NHibernate dans ce scénario tout en résolvant mes entités via Windsor.

Merci à l'avance,

Jorge Vargas.

+0

Je ne sais pas ce que vous voulez que Windsor remplisse ici. –

+0

Je ne veux pas que Windsor remplisse quoi que ce soit, c'est mon point. Je veux qu'il choisisse le constructeur protégé, comme fonctionne NHibernate. Ou je ne sais pas s'il y a une autre façon d'ajouter des intercepteurs après que NHibernate ait créé le proxy. Ce que je veux faire, c'est avoir des notifications PropertyChanged automatiques comme cela est fait dans ChinookMediaManager mais je ne peux pas avoir cela si mes entités ne sont pas résolues via Windsor. J'espère que cela vous permettra de mieux comprendre ce que je veux faire. Merci Mauricio. –

Répondre

1

Vous n'avez pas besoin d'avoir des constructeurs sans paramètres dans vos entités NHibernate ou d'écrire des activateurs Windsor personnalisés. Voir this article. `String name` ne peut pas être un composant de Windsor.

+0

J'avais déjà vu cet article mais je ne suis pas confronté à ce problème. J'ai mis à jour ma question avec plus d'informations, j'espère que vous connaissez un moyen de faire ce que je demande. Merci. –

Questions connexes