StructureMap - Je ne veux pas utiliser le constructeur vorace!
-
21-08-2019 - |
Question
Je suis en train de configurer le NCommon NHRepository dans mon projet avec carte de structure. Comment puis-je arrêter cela de choisir le constructeur vorace?
public class NHRepository<TEntity> : RepositoryBase<TEntity>
{
public NHRepository () {}
public NHRepository(ISession session)
{
_privateSession = session;
}
...
}
Ma structure configuration de carte
ForRequestedType(typeof (IRepository<>))
.TheDefaultIsConcreteType(typeof(NHRepository<>))
Vive Jake
La solution
Vous pouvez définir l'attribut pour le [DefaultConstructor]
constructeur que vous souhaitez par défaut. Dans votre cas, la mise sur le constructeur rendrait NHRepository()
la constuctor par défaut pour StructureMap initialiser.
Mise à jour: bien, dans la dernière version de StructureMap, en utilisant .NET 3.5, vous pouvez également spécifier la méthode de SelectConstructor:
var container = new Container(x =>
{
x.SelectConstructor<NHRepository>(()=>new NHRepository());
});
Enfin, je suis sûr que vous seriez en mesure de le définir dans la configuration XML de StructureMap, mais je n'ai pas utilisé cela. Vous pouvez faire une petite recherche sur elle. Pour de plus amples informations sur la méthode ci-dessus, voir: http://structuremap.sourceforge.net/ConstructorAndSetterInjection.htm # section3
Autres conseils
+1 pour Razzie parce que cela fonctionnerait si le NHRepository était dans mon propre assemblée, au lieu que je choisis d'envelopper le NHRepository avec mon dépôt comme ci-dessous ..
public class Repository<T> : NHRepository<T>
{
[DefaultConstructor]
public Repository()
{
}
public Repository(ISession session)
{
}
}
ForRequestedType(typeof (IRepository<>))
.TheDefaultIsConcreteType(typeof (Repository<>));