Est-ce que quelqu'un a utilisé l'attribut PostSharp jetable? Il existe un exemple dans la documentation http://doc.postsharp.net/disposable#customize. La dernière section montre un moyen de personnaliser la logique de disposition (code de l'exemple ci-dessous), mais elle ne compile pas (en supposant que Formatter est System.Runtime.Serialization.Formatter). L'appel de base.Dispose les résultats dans une erreur de compilation 'objet' ne contient pas de définition pour 'Disposer'. Est-ce que je lis mal cet exemple? Quel est le moyen de personnaliser la méthode disposer?Attribut jetable PostSharp
[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;
}
}
Pour les classes où la logique n'est pas Éliminez sur mesure (plus de code de l'exemple ci-dessous), la méthode Dispose est pas disponible pour appeler (HomeMadeLogger.Dispose n'existe pas).
[Disposable]
public class HomeMadeLogger
{
[Child]
public AdvisableCollection<Context> LoggingContexts { get; set; }
}
J'ai trouvé cet article qui décrit brièvement l'attribut Jetable: http://www.codeproject.com/Articles/774482/PostSharpin-Part. Il note que
... à utiliser votre type de parent dans une déclaration à l'aide, vous devez l'initialiser en dehors de la portée de l'utiliser pour éviter le type d'erreur accumulation du temps utilisé dans une déclaration à l'aide doit être implicitement convertible à System.IDisposable
var order = new Order { Id = 1, OrderDate = DateTime.Now };
using (order as IDisposable)
{
...
}
Cette méthode d'utilisation fonctionne très bien. Y a-t-il un moyen de Disposer explicitement?
Bien sûr, faites votre méthode Dispose() * public *. –
Ce serait bien pour la logique personnalisée, mais l'exemple de la logique personnalisée ne compilera pas. La logique non personnalisée n'a pas de méthode Dispose dans votre classe, elle est gérée par l'attribut. – mslissap