Ich habe folgendes konzeptionelles Modell werfen:kann nicht generisches Objekt
public interface IFoo<out T>
{
T Data { get; }
}
public struct Foo<T> : IFoo<T>
{
public Foo(T data) : this()
{
Data = data;
}
public T Data { get; private set; }
}
public class FooService<T>
{
...
public Foo<T> Get(string id)
{
...
}
}
Dann versuche ich es in einer Weise zu verwenden, die vom Konzept her entspricht dies:
// Create and register a few FooService instances
ServiceLocator.Register(new FooService<DateTime>(), "someServiceId");
ServiceLocator.Register(new FooService<double?>(), "anotherServiceId");
// Retrieve a particular FooService instance and call the Get method
var fooService = (FooService<object>)ServiceLocator.Get("someServiceId");
var foo = fooService.Get("someFooId");
ich das verwenden möchten Get() -Methode für eine FooService-Instanz - unabhängig davon, welchen Typ die ausgewählte FooService-Instanz zurückgibt. Doch dieser Code ergibt die folgende Ausnahme:
Kann nicht das Objekt von Typ 'WindowsFormsApplication7.FooService`1 [System.DateTime]' eingeben 'WindowsFormsApplication7.FooService`1 [System.Object]'.
Irgendwelche Vorschläge zur Lösung dieses Problems würden sehr geschätzt werden.
Sie könnten argumentieren, warum ich den FooService in erster Linie generisch gemacht habe. Dies geschieht jedoch, um die Typensicherheit in einer typensicheren Umgebung zu gewährleisten. In diesem speziellen Fall sollte der FooService jedoch in einem Web-API-Controller verwendet werden, um verschiedene Arten von Foo zu bedienen. Es wird eine Antwort mit Foo von T gibt die Art von T. abgesehen
Sie auch ein Schnittstelle IFooServive woher Ihr c ast ist (IFooService