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.
[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
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.
[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.
[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.