Можно ли как-то имитировать множественное наследование, используя динамические объекты? - PullRequest
8 голосов
/ 20 апреля 2011

Я только что произвел рефакторинг почти всех классов в моем слое служб для наследования от ServiceBase, чтобы уменьшить дублирование при инициализации доступа к данным и других аспектов, идентичных почти всем службам, но я был остановлен, когда достиг своегоRoleService, поскольку он должен наследоваться от RoleProvider, чтобы я мог настроить его в качестве "официального" поставщика ролей моего веб-сайта.

Теперь немного поздно, и кофеин находится в форме, но мне было интересно, есть ли способ использовать динамический объект вместо производного объекта и добавить все члены базового объекта в «производный» объект во время выполнения, а не во время компиляции.

Возможно ли это хотя бы отдаленно?

Ответы [ 3 ]

3 голосов
/ 20 апреля 2011

Нет, DynamicObject не позволяет вам наследовать от двух конкретных классов, которые представляют собой множественное наследование и которые C # не поддерживает. Проблема, с которой вы сталкиваетесь, одинакова - динамическая или статическая. Если у вас есть Base1 и Base2, которые не связаны друг с другом, то, как только вы выводите Derived из Base1, нет никакой возможности, что Derived is Base2 может когда-либо быть истинным. Вместо этого вы можете согласиться на Derived is IBase2.

Я рекомендую вам использовать:

вместе с несколькими интерфейсами или одним конкретным производным и одним интерфейсом. Для имитации множественного наследования вы:

  • создать интерфейс вместо базы
  • реализовать интерфейс, а не выводить из базы
  • создать класс разработчика, который выполняет ту работу, которую вы хотели сделать в базе
  • "мост" к разработчику, перенаправляя все вызовы интерфейса экземпляру разработчика

Это ограничивает объем кода в вашем классе реализации только одним перенаправляющим вызовом на интерфейсный метод или свойство.

1 голос
/ 20 апреля 2011

Не знаю, если вам действительно нужно решить проблему на уровне класса, но вот некоторые ресурсы, которые могут быть полезны для настройки вашего поставщика ролей в качестве службы WCF:

http://wcfsecurity.codeplex.com/wikipage?title=How%20To%20-%20Use%20SQL%20Role%20Provider%20with%20Windows%20Authentication%20in%20WCF%20calling%20from%20Windows%20Forms(что за ссылка!)

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

edit ---- Также в этом посте было упомянуто здесь: Могу ли я создать собственный поставщик ролей через службу WCF?

1 голос
/ 20 апреля 2011

Это можно сделать с помощью класса DynamicObject.

...