8
votes

Comment configurer StructureMap pour utiliser un référentiel générique?

J'ai une interface igenericrepository Où tente: Ientity et une implémentation genericRepository Où tente: entité J'essaie d'injecter Un

dans une classe à l'aide de StructureMap: xxx

mais quand j'essaie d'utiliser ObjectFactory.getinstance

> (); i get:

Structuremap Code d'exception: 202 Aucune instance par défaut définie pour PlugInfamily System.Data.common.dbconnection

Des idées Pourquoi ceci est ou Ce que je fais mal?

Merci d'avance,

SIMON


0 commentaires

3 Réponses :


3
votes

Quel est votre constructeur comme pour genericRepository <> ?

Il ou une de ses dépendances s'attend à un dbconnection que SM ne puisse pas créer.


2 commentaires

Merci pour cela, mon référentiel générique prend un objetContext sur lequel je n'ai pas ajouté par SM


Est-ce une réponse ou une autre question? Si c'est une question, pourquoi est-il marqué comme la réponse acceptée?



8
votes

Vous recevez dans votre constructeur de votre générique d'une dbconnection, qui est une classe abstraite, et ne configurez pas SM pour savoir quelle classe spécifique doit utiliser pour elle.

IE: P>

 ObjectFactory.Initialize(x =>
        {
            x.For(typeof(DbConnection)).Use(typeof(SqlConnection));
            x.For(typeof(IGenericRepository<>)).Use(typeof(GenericRepository<>));
        });


0 commentaires

4
votes

J'ai eu exactement le même problème:

avoir un référentiel générique: xxx

et une implémentation concrète: xxx

que je voulais injecté dans le constructeur des contrôleurs au moment de l'exécution où la tendance serait le modèle correspondant à ce contrôleur: xxx

Le contrôleur utiliserait alors le référentiel "_repo "Pour mettre à jour le modèle: xxx

simonjreid élancé à la réponse pour moi: a dû ajouter l'objetContext à la configuration de Structuremap (le but du référentiel était de conclure le contexte généré par EntityFramework, que j'ai appelé myContextWrapper. Par conséquent, parce que le référentiel dépendait de myContextWrapper, qui dépend à son tour de objetContext): xxx

Cependant, je reçois maintenant l'exception d'exécution Structuremap:

Code d'exception Structuremap: 205 Imposition demandée manquante Propriété "ConnectionsRing"

Après avoir lu un message par Jeremy Miller Un doux QuickStart (à droite au En bas) J'ai constaté que vous pouvez définir les arguments à transmettre dans le constructeur de vos types enregistrés, c'est-à-dire que je devais transmettre la chaîne de connexion au constructeur de la classe MyCustomContext (voici la liste complète de l'initialisation de l'objetFactory: < / p> xxx

et boom! Peut maintenant avoir mon contrôleur installé au moment de l'exécution par Structuremap et l'obtenir pour injecter une instance d'IRÉPOSITOIRE ... Happy Days.


0 commentaires