2010-05-27 8 views
2

Est-il possible de lancer une interface générique dynamique ..coulée dynamique à l'aide d'une interface générique

Site s = new Site(); 
IRepository<Site> obj = (IRepository<s.GetType()>)ServiceLocator.Current.GetInstance(t) 

évidemment la compilation ne sera pas au-dessus de cette fonte. Y a-t-il un moyen de faire une distribution dynamique d'une interface générique? J'ai essayé d'ajouter une interface non générique mais le système perd des objets dans le conteneur Loc.

Merci

Phil

Répondre

4

coulée dynamique n'est pas facilement réalisable en C#. Vous pouvez utiliser 'cast-by-example' - mais je ne le recommanderais pas - cela a tendance à être déroutant.

Dans votre cas, on ne sait pas pourquoi une conversion 'dynamique' est même nécessaire - si vous ne connaissez pas le type lors de la compilation, vous ne pouvez accéder à aucune de ses méthodes ou propriétés. Qu'est-ce qu'un tel plâtre vous gagnerait? Vous pouvez tout aussi bien écrire:

IRespository<Site> obj = 
     (IRepository<ISite>)ServiceLocator.Current.GetInstance(t); 

Si vous êtes à l'intérieur d'une méthode générique, vous pouvez toujours jeter le type de paramètre générique:

public void SomeMethod<T>() 
    where T : new() 
{ 
    T s = new T(); 
    IRepository<T> obj = (IRepository<T>)ServiceLocator.Current.GetInstance(t) 
    // ... 
} 
Questions connexes