8
votes

Puis-je en quelque sorte imiter plusieurs héritages à utiliser des objets dynamiques?

Je viens de me refactore presque toutes les classes de ma couche de services pour hériter d'un Servicebase , afin de réduire la duplication dans l'initialisation de l'accès des données et d'autres aspects identiques à presque tous les services, mais j'ai été arrêté dans mon des pistes quand j'ai atteint mon surmonter , comme il doit hériter de RoleProvider afin que je puisse le configurer comme le "officiel" de mon site Web fournisseur de rôle "

Maintenant, il est un peu tard la nuit et la caféine est sous forme, mais je me demandais s'il y avait un moyen d'utiliser un objet dynamique à la place d'un objet dérivé et ajoutez tous les membres de l'objet de base à L'objet «dérivé», à l'exécution, au lieu de compiler l'heure.

est-ce même à distance possible?


2 commentaires

+1 pour la question intéressante. Je n'ai aucune idée :)


Ne répondez pas directement à votre question ici, mais j'ai trouvé hérité d'une classe de base commune à être largement inutile lors de la séparation des préoccupations et d'utiliser correctement l'injection de dépendance. Quelque chose à considérer.


3 Réponses :


1
votes

Vous devriez être capable de le faire avec le DynamicObject classe.


0 commentaires

1
votes

Dunno Si vous avez vraiment besoin de passer des problèmes au niveau de la classe, mais voici quelques ressources pourraient être utiles pour la mise en place de votre fournisseur de rôle en tant que service WCF:

http://wcfsecurity.codeplex.com/wikipage?title=how%20To%20-%20URE%20SQL%20Role%20Provider%20With%20Windows%20Authentication%20in%20WCF % 20Calling% 20from% 20Windows% 20Forms (quel lien!)

http://msdn.microsoft.com/en-us/library /aa702542.aspx

Edit ---- Aussi, il a été mentionné dans ce post ici: Puis-je créer un rôle personnalisé via un service WCF? < / a>


0 commentaires

3
votes

Non, dynamicObject ne vous permet pas de dériver de deux classes de béton, ce qui est ce que le héritage multiple est et lequel c # ne prend pas en charge. Le problème que vous rencontrez est la même chose, dynamique ou statique. Si vous avez base1 et base2 qui ne sont pas liés les uns aux autres, puis dès que vous dérivez dérivé de base1 , il n'y a aucun moyen que dérivé est base2 peut être vrai. Au lieu de cela, vous pouvez régler pour dérivé est ibase2 .

Je vous recommande d'utiliser le:

  • modèle de pont

    ainsi que plusieurs interfaces ou une dérivation en béton et une interface. Pour simuler plusieurs héritage, vous:

    • Créez une interface au lieu d'une base
    • Implémentez l'interface au lieu de dériver de la base
    • Créez une classe de mise en œuvre qui fait le travail que vous vouliez faire dans la base
    • "pont" à la mise en œuvre en transférant toutes les appels d'interface à une instance de la mise en œuvre

      Ceci limite la quantité de code de votre classe d'implémentation à un seul appel de transfert par méthode ou propriété d'interface.


3 commentaires

Je n'ai jamais dit que je voulais hériter de deux classes, mais de construire dynamiquement un objet avec des membres des deux classes de base.


@Profk: Le titre même de votre question inclut la phrase "héritage multiple". Cela dit très clairement que vous voulez imiter héritant de deux classes. Néanmoins, je crois toujours que dynamicObject est d'aucune aide pour ajouter des membres d'une autre classe de base pseudo. Au moins pas mieux que le modèle de pont.


Je reformulerai cette question plus tard pour ne pas mentionner «héritage» et plutôt à gérer simplement des membres de plus d'un objet dans un seul objet.