J'utilise StructureMap depuis un certain temps mais je suis loin d'être un expert. Mon problème est simple, j'essaie de configurer SM via du code (Registry) pour utiliser un constructeur particulier lors de la création d'une instance d'un objet de référentiel.Définir le constructeur par défaut avec StructureMap sans fournir d'arguments ou en utilisant l'attribut DefaultConstructor
Voici mes 2 constructeurs (notez que ce n'est pas le plus gourmand).
public BusinessUnitRepository(IDatabase database)
: base(database) {
}
public BusinessUnitRepository(IDatabaseFactory factory)
: base(factory) {
}
Note: Le premier constructeur prend une instance de l'interface IDatabase
et est appelé par le cteur de la classe de base (IDatabaseFactory) de mise en œuvre. Ce que j'essaie de faire est de configurer SM pour utiliser le second constructeur et fournir une instance de DatabaseFactory
à partir du conteneur SM. Je ne peux pas utiliser l'attribut [DefaultConstructor]
dans l'assembly où BusinessUnitRepository
est défini afin que cette option soit hors de la table.
Mon code d'enregistrement
ForRequestedType<IDatabaseFactory>()
.CacheBy(InstanceScope.PerRequest)
.TheDefaultIsConcreteType<DatabaseFactory>();
ForRequestedType<Repository.IBusinessUnitRepository>()
.CacheBy(InstanceScope.PerRequest)
.TheDefault.Is.OfConcreteType<BusinessUnitRepository>().CtorDependency<IDatabaseFactory>().Is<DatabaseFactory>();
Quand je lance le programme SM lance une 302 erreur en essayant de créer une instance de BusinessUnitRepository
.
StructureMap.StructureMapException: StructureMap Exception Code: 302
There is no argument of type Repository.LinqToSql.IDatabaseFactory for concrete type Repository.LinqToSql.BusinessUnitRepository
Pour votre information:
- Si je fais StructureMap de référence dans l'ensemble de Repository.LinqToSql.BusinessUnitRepository et utiliser les touches [DefaultConstructor] attribut sur mon tout constructeur IDatabaseFactory fonctionne parfaitement.
- Aussi je l'ai confirmé que StructureMap ne contient une configuration 'Repository.LinqToSql.DatabaseFactory'
Quelle classe implémente IBusinessUnitRepository? Si vous avez une suggestion sur la façon dont vous pensez que cela devrait fonctionner, veuillez poster sur la liste de diffusion StructureMap. http://groups.google.com/group/structuremap-users –
Joshua, BusinessUnitRepository implémente IBusinessUnitRepository. – njappboy