Interfaccia I / O per libreria portatile

0

Sto scrivendo una nuova libreria portatile .NET in grado di leggere un formato di file e il file I / O non è disponibile per le librerie portatili. L'articolo " Come fare in modo che le librerie di classi portatili lavorino per te "afferma che dovrò scrivere librerie specifiche della piattaforma per risolvere questo problema per ogni piattaforma. Questo non è un problema.

Quindi, avrò il codice di lettura del formato file nella libreria portatile, e poi alcune librerie specifiche della piattaforma per aiutare con I / O specifici della piattaforma: una libreria specifica per piattaforma verrà scritta usando tradizionale tradizionale .NET System.IO.File , mentre la libreria di app di Windows Store utilizzerà Windows.Storage e quella di Windows Phone userà System.IO.IsolatedStorage . So che WinRT è tutto asincrono, ma ho solo esperienza con il tradizionale .NET File e I / O sincrono.

Ciascuna di queste librerie specifiche della piattaforma farà riferimento alla libreria portatile e fornirà al lettore del formato file un'implementazione specifica della piattaforma di un oggetto di origine dati:

ISomeDataSource dataSource = new WinRTDataSource(@"filename.bin");
var reader = new FileFormatReader(dataSource);

Come faccio a progettare l'interfaccia (ad esempio ISomeDataSource sopra) in modo tale che possa leggere e cercare all'interno dei dati? Ma allora indipendente dalla piattaforma e forse anche asincrona?

Ho accesso a tutte le funzionalità di Visual Studio 2012 e C # 5 ( async e await ), ma poiché non sono su Windows 8 non posso provare WinRT.

    
posta Daniel Pelsmaeker 08.03.2013 - 17:11
fonte

1 risposta

1

Non vedo nulla di difficile su questo, puoi semplicemente creare l'interfaccia (usando il metodo asincrono per Read() ) e poi implementarla tre volte:

interface ISomeDataSource
{
    Task<int> ReadAsync(byte[] buffer, int offset, int count);
    long Seek(long offset, SeekOrigin origin);
}

Entrambe le firme vengono copiate da Stream . Quale è un'altra opzione: usa Stream invece della tua interfaccia. Ha ReadAsync() , Seek() e altro.

Puoi farlo poiché System.IO e System.IO.IsolatedStorage utilizzano direttamente Stream ( FileStream in System.IO e IsolatedStorageFileStream in System.IO.IsolatedStorage ). WinRT ha i propri tipi di stream, ma puoi convertirli in Stream usando i metodi di estensione da WindowsRuntimeStreamExtensions .

    
risposta data 09.03.2013 - 00:57
fonte

Leggi altre domande sui tag