Кто-нибудь использовал атрибут PostSharp Disposable?PostSharp Одноразовый атрибут
В документации http://doc.postsharp.net/disposable#customize приведен пример. В последнем разделе показан способ настройки логики удаления (код из приведенного ниже примера), но он не компилируется (предполагается, что Formatter является System.Runtime.Serialization.Formatter). Calling base.Dispose результаты в ошибке компилятора «объект» не содержит определения для «Dispose». Я читаю этот пример неправильно? Каким образом можно настроить метод удаления?
[Disposable]
public class MessageFormatter : Formatter
{
[Child]
MessageSink sink;
public bool IsDisposed { get; private set; }
protected virtual void Dispose(bool disposing)
{
base.Dispose(disposing);
this.IsDisposed = true;
}
}
Для классов, где логик Dispose не настроен (больше коды из приведенного ниже примера), метод Dispose не доступен для вызова (HomeMadeLogger.Dispose не существует).
[Disposable]
public class HomeMadeLogger
{
[Child]
public AdvisableCollection<Context> LoggingContexts { get; set; }
}
Я нашел эту статью, в которой кратко обсуждает Одноразовая атрибут: http://www.codeproject.com/Articles/774482/PostSharpin-Part. Он отмечает, что
... использовать родительский тип в использовании заявления вы должны инициализировать его за рамки из использования, чтобы избежать ошибок типа сборки времени используется в использовании оператора должен быть неявно преобразованы в System.IDisposable
var order = new Order { Id = 1, OrderDate = DateTime.Now };
using (order as IDisposable)
{
...
}
Этот метод использования отлично работает. Есть ли способ явно утилизировать?
Несомненно, сделайте свой метод Dispose() * общедоступным *. –
Это было бы хорошо для настраиваемой логики, но пример настраиваемой логики не будет компилироваться. Нестандартная логика не имеет метода Dispose в вашем классе, она обрабатывается атрибутом. – mslissap