С помощью Unity я хочу проверить флаг bool перед установкой значения в свойствах в типе?

101
13

Я хочу реализовать приостановку и возобновить привязку в silverlight, используя флаг, делая большую операцию в сценарии привязки.

Моя проблема заключается в существующем проекте, использующем механизм тяжелой привязки чертежа.

Используя UpdateTrigger() в silverlight, мы могли бы добиться ручного запуска привязки.

Но это огромный продукт. Невозможно обновить и найти места для ручного запуска привязки и т.д. И изменить проект.

Таким образом, мы планировали использовать Microsoft Unity для быстрого исправления, приостановив и возобновив привязку, используя флаг при операции рисования при большой нагрузке. Это может быть быстрым решением проблемы текущей производительности при рисовании объектов привязки.

Я хочу проверить флаг bool перед установкой значения для свойств для другого типа? Я так сильно устал, что искал Перехват перед владельцем недвижимости. Но не нашел пути. Все еще борется. Это мое точное требование.

Кто-нибудь поможет?

Добавлен пример кода,

//Empty Interface may be used in interface interception, not sure.
public interface ISetter
{
}

//Implementation of ISetter, this type needs to be intercepted while setting the FirstName //property
public class Man : ISetter
{

private string firstName;

public Man()
{
}

[NotifyHandler] //Expected: this handler should be called when FirstName property set
public string FirstName
{
get { return firstName; }
set { firstName = value; }
}

}

public class NotifyHandler : ICallHandler
{
public Boolean Before { get; set; }
public Boolean After { get; set; }
public String Message { get; set; }
int ICallHandler.Order { get; set; }

IMethodReturn ICallHandler.Invoke(IMethodInvocation input,
GetNextHandlerDelegate getNext)
{
if (this.Before == true)
{
Debug.WriteLine(this.Message);
}

IMethodReturn result = getNext()(input, getNext);

if (result.Exception != null)
{
Debug.WriteLine(result.Exception.Message);
}
else
{
if (this.After == true)
{
Debug.WriteLine(this.Message);
}
}
return (result);
}
}

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property
| AttributeTargets.Method)]
Public class NotifyHandlerAttribute : HandlerAttribute
{
public NotifyHandlerAttribute()
{
}

public override ICallHandler CreateHandler(IUnityContainer ignored)
{
return new NotifyHandler();
}
}

public abstract class HandlerAttribute : Attribute
{
/// Derived classes implement this method. When called, it creates a
/// new call handler as specified in the attribute configuration.
/// The parameter "container" specifies the IUnityContainer
/// to use when creating handlers, if necessary.
/// returns a new call handler object.
public abstract ICallHandler CreateHandler(IUnityContainer container);
private int executionorder;

/// <summary>
/// Gets or sets the order in which the handler will be executed.
/// </summary>
public int Order
{
get { return this.executionorder; }
set { this.executionorder = value; }
}
}

//Interception registered in the application start up

private void Application_Startup(object sender, StartupEventArgs e)
{
IUnityContainer container = new UnityContainer();

container.AddNewExtension<Interception>();
container.RegisterType<Man>().Configure<Interception>();

var m1 =container.Resolve<Man>();
m1.FirstName = "test";

Man m = new Man();
m.FirstName = "fine";

}

В приведенном выше значении свойство FirstName setter не вызывает NotifyHandler.

спросил(а) 2013-11-05T05:06:00+04:00 6 лет, 6 месяцев назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема