Описание тега postsharp
С помощью PostSharp вы можете легко писать и применять настраиваемые атрибуты, которые добавляют новое поведение к вашему коду - трассировку, управление потоками, обработку исключений, привязку данных и многое другое.
PostSharp работает, внедряя IL во время процесса сборки, чтобы внести аспекты в исходный метод.
Готовые выкройки
PostSharp поставляется с библиотекой готовых реализаций шаблонов, включая контракты кода, INotifyPropertyChanged, immutable, freezable и другие модели потоковой передачи.
Пример: следующий фрагмент показывает, как атрибут NotifyPropertyChanged автоматически реализует интерфейс INotifyPropertyChanged, включая прослушивание двух уровней дочерних объектов.
[NotifyPropertyChanged]
public class CustomerViewModel
{
public CustomerModel Customer { get; set; }
public string FullName
{
get
{
if (Customer == null) return null;
return string.Format("{0} {1} from {2}",
Customer.FirstName,
Customer.LastName,
Customer.PrincipalAddress != null ?
Customer.PrincipalAddress.FullAddress : "?");
}
}
}
Пользовательские шаблоны
PostSharp также имеет богатый набор инструментов для автоматизации реализации ваших собственных шаблонов.
Примеры:
Отслеживание:
[PSerializable]
public class TraceAttribute : OnMethodBoundaryAspect
{
public override void OnEntry(MethodExecutionEventArgs eventArgs)
{
Trace.TraceInformation("Entering {0}.", eventArgs.Method);
}
public override void OnExit(MethodExecutionEventArgs eventArgs)
{
Trace.TraceInformation("Leaving {0}.", eventArgs.Method); }
}
}
Отправка потоков WPF:
[PSerializable]
public class GuiThreadAttribute : OnMethodInvocationAspect
{
public override void OnInvocation(MethodInvocationEventArgs eventArgs)
{
DispatcherObject dispatcherObject = (DispatcherObject)eventArgs.Delegate.Target;
if (dispatcherObject.CheckAccess())
eventArgs.Proceed();
else
dispatcherObject.Dispatcher.Invoke(DispatcherPriority.Normal,
new Action(() => eventArgs.Proceed()));
}
}
Применение:
[Trace]
public void CreateCustomer(int id, string name) { /* ... */ }
Установка
PostSharp проще всего установить через пакет NuGet.
Install-Package PostSharp
Лицензирование
PostSharp - это коммерческий продукт с бесплатной версией.