Je souhaite traiter de la même manière différents types de documents dans mon application Par conséquent: J'ai une interface générique comme celle-ci.injection de dépendance de type générique: comment injecter T
public interface IDocHandler<T>where T: class
{
T Document { get;set;}
void Load(T doc);
void Load(string PathToDoc);
void Execute();
void Execute(T doc);
}
Et pour différents types de documents, j'implémente cette interface.
par exemple:
public class FinanceDocumentProcessor:IDocumentHandler<ReportDocument>
{}
public class MarketingDocumentProcessor:IDocumentHandler<MediaDocument>
{}
alors je peux faire bien sûr quelque chose comme ceci:
IDocumentHandler<ReportDocument> docProc= new FinanceDocumentProcessor();
Il serait interessting de savoir comment je pourrais injecter T lors de l'exécution pour que la ligne ci-dessus loosly couplé ...
IDocumentHandler<ReportDocument> docProc = container.resolve("FinanceDocumentProcessor());
mais je veux décider par configuration si je veux avoir mon FinanceDomcume ntProcessor ou mon MarketingDocumentProcessor ... donc je devrais injecter T sur le site de gauche, aussi ... Puisque je dois utiliser C# 2.0 je ne peux pas utiliser le mot magique "var" qui aiderait beaucoup dans ce cas. .. mais comment puis-je concevoir que ce soit ouvert et flexible ...
Désolé pour le malentendu et merci pour tous les commentaires mais j'ai un autre exemple pour mon défi (peut-être que je me sers de la mauvaise conception pour que) ... mais je donne un essai: même situation mais différente Explication
Exemple d'image je:
ReportingService, Crystal, ListAndLabel Trois types de document de rapport différents. J'ai un gestionnaire générique IReportHandler<T>
(serait le même que ci-dessus) ce gestionnaire fournit toutes les fonctionnalités pour gérer un document de rapport. pour l'exemple
ChrystalReportHandler:IReportHandler<CrystalReportDocument>
Maintenant, je veux utiliser un cadre comme l'unité (ou un cadre d'autre) pour l'injection de dépendance de décider par la configuration si je veux utiliser Crystal, Reportingservices
Liste et étiquette.
Lorsque je spécifie ma cartographie, je peux injecter mon ChrystalReportHandler
mais comment puis-je injecter T sur le côté gauche ou dans un meilleur mot Le type de ReportDocument
.
IReportHandler<T (this needs also to be injected)> = IOContainer.Resolve(MyMappedType here)
mon problème est le site gauche bien sûr, car il est couplé au type, mais je me cartographie ... serait-il possible de générer un objet basé sur la cartographie et attribuer le type cartographié? ou en gros injecter T sur le côté gauche, aussi? Ou cette approche ne convient-elle pas à cette situation?