2010-11-21 18 views
14

Coders, Sto cercando di convertire una stringa XAML in HTML usando una libreria che ho trovato here, ma ho un problema con la creazione di una nuova istanza dell'oggetto che mi permetterebbe di usare la libreria . Ho già aggiunto un riferimento alla libreria nel mio progetto Asp.net e vorrei utilizzarlo in un file WCF.'spazio dei nomi utilizzato come un tipo' errore

Il problema è che ogni volta che provo a un'istanza di un nuovo oggetto con la nuova parola chiave, ottengo un errore che dice:

'MarkupConverter' is a 'namespace' but is used like a 'type'.

Ecco il mio codice, si noti che sto creando un nuovo oggetto, proprio come nell'esempio mostrato nel link libreria sopra, si prega di aiuto:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.ServiceModel; 
using System.Text; 
using System.Web.Services; 
using System.Net.Mail; 
using System.ServiceModel.Activation; 
using System.Data.SqlClient; 
using MarkupConverter; 

namespace AspPersonalWebsite 
{ 
    [ServiceContract(Namespace = "")] 
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
    public class Service1 //: IService1 
    { 
     private string connectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString; 
     private IMarkupConverter markupConverter;   

     [OperationContract] 
     public string convertXAMLToHTML(string XAMLtext) 
     { 
      string htmlText = ""; 
      markupConverter = new MarkupConverter(); /*PROBLEM IS HERE*/ 
      htmlText = markupConverter.ConvertXamlToHtml(XAMLtext); 
      return htmlText; 
     } 
    } 
} 
+0

il blocco di codice non viene visualizzato correttamente! – ealshabaan

+1

@abatishchev hai rimosso le istruzioni using in modifica ... li ho visti quando il post non è stato modificato –

+0

@Srinivas: Mi spiace, colpa mia – abatishchev

risposta

19

confusione derivante dal fatto che il tipo effettivo è MarkupConverter.MarkupConverter, il compilatore sembra pensare il tuo new MarkupConverter è un tentativo di utilizzare uno spazio dei nomi come un tipo, piuttosto che un tentativo di creare un'istanza di un tipo all'interno del vostro using spazio dei nomi.

semplicemente cambiare la vostra linea problema:

markupConverter = new MarkupConverter.MarkupConverter(); /*SOLUTION HERE!*/ 

..e si dovrebbe andare bene.

3

Questo è praticamente auto esplicativo,

MarkupConverter è uno spazio dei nomi, quindi non dovrebbe essere utilizzato come classe per creare un oggetto

+1

un downvote dopo 4 anni, senza una spiegazione. –

+4

forse potrebbe farti una sorta di distintivo strano. – sweaver2112

0

È necessario aggiungere un'istruzione "using MarkupConverter" nella sezione degli utilizzi. Questo importerà tutte le classi da quel namespace.

+0

L'ho fatto ma l'utente abatishchev l'ha rimosso quando ha modificato il mio post !! – ealshabaan

+0

abatishchev ha ripristinato la rimozione, a quanto pare. Quindi questa risposta è un po 'obsoleta ora, direi? –

2

Puoi mostrare la classe MarkupConverter che usi? L'errore è forse nella sua dichiarazione. In Where namespace è? Qual è la tua struttura di file?

Forse avete creato uno spazio dei nomi MarkupConverter?

7

Nel tuo caso, hai uno spazio nomi MarkupConverter e una classe con lo stesso nome (MarkupConverter di nuovo).

Nella riga markupConverter = new MarkupConverter(); /*PROBLEM IS HERE*/ il compilatore non è in grado di indicare che si intende utilizzare la classe. Poiché è presente uno spazio dei nomi con lo stesso nome, il compilatore lo sceglie, perché gli spazi dei nomi sono collegati con priorità più alta dal compilatore.

È possibile risolvere questo utilizzando il nome completo della classe:

// supposedly MarkupConverter is the namespace of the MarkupConverter class 
markupConverter = new MarkupConverter.MarkupConverter(); 

Un modo alternativo per fornire il nome completo della classe è quello di utilizzare un alias, che assume la forma di using {ALIAS} = {Fully qualified name of Type| Namespace}. Si noti che la parte {ALIAS} può essere un qualsiasi identificatore valido.

L'alias è possibile inserire sia nei vostri usings:

using System.Net.Mail; 
using System.ServiceModel.Activation; 
using System.Data.SqlClient; 
using MarkupConverter; 

using MarkupConverter = MarkupConverter.MarkupConverter; // this is aliasing 

o dopo la dichiarazione dello spazio dei nomi:

using System.Data.SqlClient; 
using MarkupConverter; 

namespace AspPersonalWebsite 
{ 
    using MarkupConverter = MarkupConverter.MarkupConverter; 

    .... 

e siete pronti per partire!A questo punto, se alias sono presenti, la linea

markupConverter = new MarkupConverter() 

sarà correttamente scegliere la classe MarkupConverter, perché aliasing esplicito ha la priorità rispetto ai automatica legame fatto dal compilatore.

+0

La seconda soluzione suona molto elegante, ma sfortunatamente ottengo 'Namespace 'Topns' contiene una definizione in conflitto con l'alias 'MarkupConverter''. (Topns è lo spazio dei nomi superiore sopra lo spazio dei nomi MarkupConverter). –

+0

Quando si esegue l'alias all'interno di uno spazio dei nomi, è comunque necessario utilizzare il nome completo del tipo nell'alias. Ad esempio 'usando MarkupConverter = Topns.MarkupConverter.MarkupConverter', dove' Topns.MarkupConverter' è uno spazio dei nomi contenente la classe 'MarkupConverter'. Per risolvere ulteriormente la confusione del compilatore, si può anche usare 'usando MarkupConverter = global :: Topns.MarkupConverter.MarkupConverter' In generale il prefisso' global :: 'dovrebbe essere usato raramente, ma è utile se i propri namespace sono in conflitto con quelli da un gruppo di riferimento –

+0

Ho scritto 'usando MarkupConverter = global :: Topns.MarkupConverter.MarkupConverter;' ma poi 'protetto MarkupConverter pippo;' non riesce a compilare, con questo errore: 'Namespace 'Topns' contiene una definizione in conflitto con l'alias ' MarkupConverter''. –

Problemi correlati