Недавно я нашел this question на форуме поддержки PostSharp. Не похоже, чтобы этот вопрос задавали здесь, поэтому я сделаю это сейчас.Ввести общий/динамический интерфейс с PostSharp
Оригинальный вопрос поинтересовался общими интерфейсами. Я заинтересован в этом, но мне также интересно просто динамически реализовать интерфейс для объекта, указав на реализацию прокси.
Вот что я пытаюсь выполнить, но, как вы можете видеть, я получаю сообщение об ошибке на отмеченной строке ниже, так как IntroduceInterfaceAttribute
не является IAspect
.
public class ApplyInterfaces : TypeLevelAspect, IAspectProvider
{
readonly Type[] interfaceTypes;
public ApplyInterfaces(params Type[] interfaceTypes)
{
this.interfaceTypes = interfaceTypes;
}
public IEnumerable<AspectInstance> ProvideAspects(object targetElement)
{
var type = (Type)targetElement;
var targetTypes = InterfaceTypeProvider.GetInterfacesFor(type); // pseudo-code. Get interfaces to implement "somewhere".
foreach (var interfaceType in interfaceTypes.Concat(targetTypes))
{
yield return new AspectInstance(type, new IntroduceInterfaceAttribute(interfaceType)); // doesn't work.
}
}
}
Возможно ли это с помощью PostSharp?
Так в чем же проблема, которую вы пытаетесь решить. Что-то с дженериками или чем-то с реализацией интерфейса довольно обширно. Пожалуйста, покажите пример того, что вы пытаетесь сделать и что вы пробовали – Batavia
для axample - это то, что вы пытаетесь сделать? Http: //www.postsharp.net/blog/post/PostSharp-Principals-Day-14-e28093 -Интегрирование-членов-и-интерфейсов-Часть-1 (первая ссылка в google) – Batavia
Вы правильно @Batavia, спасибо за ваши отзывы. Я мог бы приложить больше усилий в этом вопросе. Я обновил код и больше контекста. Я также ответил на мой вопрос ниже тем, что я сейчас использую для работы с проблемой общего интерфейса, используя (что я считаю) шаблон адаптера. Любая обратная связь вокруг любого из них была бы оценена! –