2017-07-19 1 views
-1

Ich habe eine Implementierung einer abstrakten Klasse, die an eine Funktion übergeben wird, die einen generischen T Parameter der angegebenen abstrakten Klasse akzeptiert. Aber aus irgendeinem Grund gibt es mir einen Fehler, der besagt, dass die konkrete Klasse im gegebenen Kontext nicht gültig ist.Konkrete Klasse ist in gegebenem Kontext nicht gültig, wenn sie als Typ übergeben wurde

Alle Ideen auf was geht, würde geschätzt werden.

Hilfsmethode

public static async Task<bool> StartSingleAppService<T>(T type) where T : Service 
    { 
     // GetServiceMaintainer() gets a singleton of my Services list 
     if (ServiceMaintainer.GetServiceMaintainer() != null) 
     { 
      Service service = ServiceMaintainer.GetServiceMaintainer().FindServiceByType(type); 
      if (await ServiceMaintainer.StartService(service)) 
      { 
       return true; 
      } 
     } 
     return false; 
    } 

Usage

// `UpdateService` is type not valid in the given context 
await AppServices.StartSingleAppService(UpdateService); 

Update

public class UpdateService : Service 

Dienst

public abstract class Service 

Hinweise:

  • Die Service abstrakte Klasse definiert abstrakte Aufgabe Methoden. public abstract Task<bool> start();
  • Die Service abstrakte Klasse definiert ein Paar Membervariablen
  • Die UpdateService Klasse die abstrakten Methoden implementiert und hat ein paar Hilfsfunktionen.
+0

Bitte den vollständigen Inhalt des Fehlers veröffentlichen, sowie die Erklärung des 'UpdateService' variabel. –

+0

@ JonB es ist keine Variable. Es ist die Klasse, die als Typ behandelt wird. und der Fehler ist nichts mehr als das, was ich gesagt habe. – visc

+0

Rufen Sie Methode mit einem Objekt der 'UpdateService' Klasse auf oder übergeben Sie den Typ' UpdateService' an die Methode? –

Antwort

3

Sie haben Ihre Äpfel und Birnen leicht in einer Drehung. Wie es derzeit deklariert ist, erwartet die Methode keinen Typ, sie erwartet eine Instanz eines Typs. Wahrscheinlich möchten Sie den Parameter entfernen und einen Typof-Operator in Ihrer Methode verwenden.

// argument removed here ------------------------------\/ 
public static async Task<bool> StartSingleAppService<T>() where T : Service 
{ 
    // GetServiceMaintainer() gets a singleton of my Services list 
    if (ServiceMaintainer.GetServiceMaintainer() != null) 
    { 
     Service service = ServiceMaintainer 
      .GetServiceMaintainer() 
      .FindServiceByType(typeof(T)); 
     // argument changed here --/\ 

     if (await ServiceMaintainer.StartService(service)) 
     { 
      return true; 
     } 
    } 
    return false; 
} 

Die Website Aufruf ändert etwas zu:

await AppServices.StartSingleAppService<UpdateService>(); 
+0

Danke das ist es – visc

Verwandte Themen