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
{
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>();
[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.