Возможно ли создать пользовательский атрибут (MyAttribute), чтобы во время выполнения get из Derived.MyProperty фактически вызывал Base.GetProperty («MyProperty») и набор Derived.MyProperty вызывает Base.SetProperty («MyProperty», значение).Использование декорированного атрибута для метода вызова метода базового класса
class Derived : Base
{
[MyAttribute]
string MyProperty { get; set;}
}
class Base
{
XmlDoc _xmldoc;
void SetProperty(string key, string value)
{
set key, value into _xmldoc;
}
string GetProperty(string key);
{
get key value from _xmldoc;
}
}
Вот решение, полученное из комментариев ниже. Спасибо всем комментаторам.
public class WatchAttribute : HandlerAttribute
{
public override ICallHandler CreateHandler(IUnityContainer container)
{
return new WatchHandler();
}
}
public class WatchHandler : ICallHandler
{
public int Order { get; set; }
public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
{
Console.WriteLine(string.Format("Method '{0}' on object '{1}' was invoked.",
return getNext()(input, getNext);
}
}
public class SomeAction : MarshalByRefObject
{
[Watch]
public string MyProperty1 { get; set; }
public string MyProperty { get; set; }
}
class Program
{
static void Main(string[] args)
{
SomeAction c = new SomeAction();
IUnityContainer container = new UnityContainer()
.AddNewExtension<Interception>();
container.Configure<Interception>()
.SetInterceptorFor<SomeAction>(new TransparentProxyInterceptor())
.AddPolicy("WatchAttribute Policy")
.AddMatchingRule(new PropertyMatchingRule("*", PropertyMatchingOption.GetOrSet));
container.RegisterInstance<SomeAction>(c);
c = container.Resolve<SomeAction>();
c.MyProperty1 = "Hello";
c.MyProperty = "Hello";
}
}
Почему бы просто не реализовать их для этого? –
Я пытаюсь упростить процесс разработки для пользователей Base. Base - это класс, который передается от узла к узлу в рабочем процессе и на каждом узле разработчик, который закодировал процессор на узле, может добавлять данные к принятому базовому объекту. Я пытаюсь скрыться от разработчика, добавленные свойства фактически содержатся в XML-документе, а также делают это естественным образом для разработчика. – user481779
Этот вопрос может решить вашу проблему, если вы хорошо с IL ткачества [PostSharp аспекта для инкубационных свойств, вызывая общий метод] [1] [1]: http://stackoverflow.com/questions/246685/ postsharp-aspect-for-property-setters-call-generic-method –