Martin Dybal

Vývojářský blog Martina Dybala

Podle kategorie

PostSharp 4

Martin Dybal       22.11.2014       PostSharp a AOP       13523 zobrazení

Nedávno vyšla nová verze PostSharp 4. Došlo k řadě vylepšení a optimalizací. Pojďme se podívat na nejpodstatnější novinky.

Undo / Redo

 

Jak již název napovídá PostSharp přináší jednoduchý způsob implementace funkce zpět a vpřed. Stačí použít nový aspekt Recordable ten defaultně ukládá změny ve třídě do RecordingServices.DefaultRecorder, samozřejmě lze použít i jinou instanci.

1
2
3
4
5
6
7
8
[Recordable]
[NotifyPropertyChanged]
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

Ve wpf přidáme kontrolky pro tlačítka vpřed a vzad

1
2
3
4
5
6
xmlns:model="clr-namespace:PostSharp.Patterns.Model.Controls;assembly=PostSharp.Patterns.Model.Controls"
 
...
 
 <model: verticalalignment="Top" margin="22,24,0,0" horizontalalignment="Left" undobutton />
 <model: verticalalignment="Top" margin="64,24,0,0" horizontalalignment="Left" redobutton />

A máme hotovo. Samozřejmě že nemusíme využívat PostSharp komponenty a můžeme použít vlastní, to nám umožní Metody Recorderu. Referenci na defaultní recorder dostaneme pomocí RecordingServices.DefaultProvider.

Multi threadingové programování

Na multi-threading a především na thread-safe se zaměřili při vývoji nového PostSharpu asi nejvíce. PostShrap zvyšuje abstrakci paralelního programování, implementací několika běžných problémů pomocí aspektů, jako například problém čtenářů a písařů. Kompletní přehled naleznete v tomhle dokumentu, detaily pak v dokumentaci Threading Pattern Library.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
[ReaderWriterSynchronized]
class Order
{
    // Other details skipped for brevity.
 
    public decimal Amount
    {
       [Reader] get;
 
       [Writer] private set;
    }
 
    [UpgradeableReader]
    public void Recalculate()
    {
        decimal total = (decimal)0.0;
        for (int i = 0; i < lines.Count; ++i)
        {
            total += lines[i].Amount;
        }
 
        this.Amount = total;
    }
}
 
[ReaderWriterSynchronized]
class OrderCollection : ICollection<Order>, INotifyCollectionChanged
{
    List<Order>  list = new List<Order>();
 
    // Details skipped.
 
    [Reader]
    public int Count
    {
        get
        {
            return list.Count;
        }
    }
 
    [Writer]
    public void Add(Order o)
    {
        list.Add(o);
        NotifyCollectionChangedEventArgs changedArgs = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, o);
        OnCollectionChanged(changedArgs);
    }
 
    [Writer]
    public void Remove(int index)
    {
        NotifyCollectionChangedEventArgs changedArgs = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, list[index]);           
        list.RemoveAt(index);
        OnCollectionChanged(changedArgs);
    }
 
    [Yielder]
    private void OnCollectionChanged(NotifyCollectionChangedEventArgs changedArgs)
    {
        CollectionChanged(this, changedArgs);
    }
 
    [Reader]
    public Order Get(int index)
    {
        return (Order)list[index];
    }
 
    public event NotifyCollectionChangedEventHandler CollectionChanged;
}

Kolekci samozřejmě nemusíme implentovat, stačí použít AdvisableCollection.

1
2
3
4
[ReaderWriterSynchronized]
class OrderCollection : AdvisableCollection<Order> 
{
}

Podpora

PostSharp 4 nově podporuje

    • Win RT
    • Windows Phone včetně "Silverlight"
    • C++ “mixed mode”

PostSharp 4 vyžaduje

  • Na vývojářský strojích a build servrech
    • .NET 4.5
    • Visual Studio 2012 nebo novější
  • Na uživatelských PC
    • .NET 3.5 a vyšší
    • Windows phone 8 nebo 8.1
    • Silverlight 5

    Live Webinar

    Ve čtvrtek 20.listopadu proběhne Live Webinar: What's New in PostSharp 4

    Aktualizace

    Dnes vyšel PostSharp 4.1 Preview, lze ho stáhnout přes nuget jako pre-release package. Nová verze přináší podporu VisualStudia 2015 a Především pak podporu XAMARIN. Již je možné psát vlastní aspekty v Xamarin projektech, ale ještě nebyly portovány předdefinované aspekty PostSharpu, toho se dočkáme v některé z příštích preview. Podpora je zatím jen velmi základní, ale důležité je, že se na ní pracuje! Dále přibyla PostSharp Threading Pattern Library pro Windows Phone a Windows Store.

     

    hodnocení článku

    0       Hodnotit mohou jen registrované uživatelé.

     

    Nový příspěvek

     

    Příspěvky zaslané pod tento článek se neobjeví hned, ale až po schválení administrátorem.

               
    Nadpis:
    tučnékurzívapodtržené   kód Visual Basickód C#kód SQLkód HTML nebo XMLkód Javascriptkód CSStext
    Antispam: Komu se občas házejí perly?
    Příspěvek bude publikován pod identitou   anonym.

    Nyní zakládáte pod článkem nové diskusní vlákno.
    Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

     

    • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
      Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
    • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

    Příspěvky zaslané pod tento článek se neobjeví hned, ale až po schválení administrátorem.

    přihlásit pomocí externího účtu

    přihlásit pomocí jména a hesla

    Uživatel:
    Heslo:

    zapomenuté heslo

     

    založit nový uživatelský účet

    zaregistrujte se

     
    zavřít

    Nahlásit spam

    Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

    Nahlásit Zrušit

    Chyba

    zavřít

    feedback