2013-04-15 10 views
7

Vorrei chiedere un dubbio riguardo alla Portable Class Library. Sto sviluppando un layer DAL e sto utilizzando il progetto Portable per i miei oggetti business, questo progetto è destinato a .Net Framework 4.03 e versioni successive, SilverLight 4 e versioni successive e .Net per le app di Windows Store.Esiste un modo per implementare IValidatableObject su Portable Class Library Project?

Vorrei implementare IValidatableObject interfaccia su ciascuno dei miei oggetti di business, ma anche quando System.ComponentModel.DataAnnotations è disponibile per i quadri di questo progetto si rivolge a, ho leggere documenti in accesso a IValidatableObject interfaccia, non è disponibile sul portatile .net framework, né l'attributo MetadataType esiste su di esso. C'è qualche soluzione per raggiungere questo approccio?

risposta

6

Probabilmente non c'è una soluzione facile per questo. È possibile creare la propria interfaccia in una libreria di classi portatile con la stessa funzionalità. Tuttavia, sarebbe un'interfaccia diversa, quindi altri framework che utilizzano DataAnnotations (ASP.NET MVC e Entity Framework credo) non utilizzerebbero la tua versione.

Per risolvere questo problema, è possibile creare un PCL con l'interfaccia con lo stesso nome e le API esistenti sulle diverse piattaforme. Quindi creare le librerie di classi per .NET 4.0.3, SL4 e Windows Store con la stessa identica identità di assemblaggio (nome, versione e chiave con nome sicuro) e in tali assembly è sufficiente inserire un attributo [assembly:TypeForwardedToAttribute(typeof(IValidatableObject))].

Quindi i PCL possono fare riferimento alla libreria PCL con l'interfaccia, e in tutte le app che utilizzano i PCL, fare riferimento all'assembly di inoltro dei tipi per quella piattaforma, che reindirizzerà il riferimento alla versione PCL dell'interfaccia a quella che viene nella piattaforma.

+0

Grazie mille, mi sembra una bella soluzione. – user2275999

Problemi correlati