2013-03-01 12 views
5

Ho un'applicazione Windows Store che utilizza un'attività in background. L'attività in background è memorizzata in un progetto componente Windows Runtime. (Questa struttura sembra essere l'unico modo per far funzionare le attività in background.)Come posso superare la limitazione Componente di Windows ai tipi di runtime di Windows?

Nel progetto di attività in background, ho alcuni metodi pubblici esternamente visibili che hanno tipi di ritorno/parametro che sono le mie classi piuttosto che le classi di Windows Runtime.

Ad esempio:

public MyClass DoSomething() 
{ 
    return null; 
} 

Quando costruisco, ricevo errori come quanto segue in relazione a questi metodi:

Metodo 'X' restituisce 'Y', che non è un tipo di Windows Runtime valido. I metodi esposti a Windows Runtime devono restituire solo i tipi di Windows Runtime.

e

Metodo 'T' ha parametro 'U' di tipo 'W'. 'W' non è un tipo di parametro di Windows Runtime valido.

Posso capire che cosa dicono gli errori, ma non ho pensato ad un buon modo per strutturare il mio codice in modo da soddisfare questi requisiti.

Qui ci sono alcune cose che ho già considerati:

  1. Cambiare il progetto compito di sfondo ad un progetto Libreria di Windows Store. Ciò ha consentito l'utilizzo dei tipi di runtime non Windows nelle firme del metodo, ma l'attività in background non è più stata avviata.
  2. Utilizzo di una libreria di classi portatile. Questo non ha funzionato perché non ha avuto accesso a Windows Runtime.
  3. Per i tipi di valore, posso suddividerli in Tuple s o più parametri, ma questo sembra disordinato, meno strutturato e meno gestibile. Sono fermamente contrario a questo tipo di programmazione.
  4. Per le classi, sembra che potrei dover duplicare la loro logica su entrambe le applicazioni. Questo è un enorme problema di manutenibilità.
+1

Si sta rendendo inutilmente difficile rispondere non mostrandoci come sono questi metodi. I tipi personalizzati richiedono la creazione di un proxy, controlla [questa risposta] (http://stackoverflow.com/a/14802799/17034). –

+0

@ HansPassant: Grazie! Ho modificato la domanda per renderla un po 'più chiara. – Sam

+0

Non riesco ancora a vedere come sono questi metodi. –

risposta

6

Sono riuscito a farlo funzionare isolando l'attività in background in un progetto Componente di Windows e spostando il codice dipendente da Runtime di Windows riutilizzabile in un progetto Libreria di classi di Windows Store.

+0

Grazie per aver condiviso questa soluzione, ha funzionato perfettamente nel mio caso. Sto generando automaticamente alcuni file buffer di protocollo che sono pubblici e restituiscono tipi personalizzati di default, quindi ha fatto lamentare il compilatore. L'isolamento di queste classi generate in una libreria di classi lo ha completamente risolto – fnicollet

Problemi correlati