J'ai créé un wrapper d'unité de travail pour mes méthodes d'accès aux données Nhibernate. J'initialise ma session Factory dans le constructeur statique de la classe UnitOfWork, en espérant la faire initialiser une seule fois.Création d'une dépendance ninject avec le constructeur statique
public class UnitOfWork : IUnitOfWork
{
private static readonly ISessionFactory _sessionFactory;
static UnitOfWork()
{
var oracleConfiguration = OracleDataClientConfiguration.Oracle10.ConnectionString(ConfigurationManager.ConnectionStrings[Constants.CONNECTION_STRING].ConnectionString);
_sessionFactory = Fluently.Configure()
.Database(oracleConfiguration)
.Mappings(m => m.FluentMappings.Add<MyMap>())
.BuildSessionFactory();
}
}
Je lie alors cette dépendance de UnitOfWork avec Ninject noyau lors de mon démarrage de l'application et attendre ensuite Ninject de le résoudre dans le constructeur de mon accès aux données du référentiel. (J'utilise l'injection Constructor).
public class Module : NinjectModule
{
public override void Load()
{
Bind<IUnitOfWork>().To<UnitOfWork>();
}
}
Mais après la résolution, je pourrais comprendre que le code dans le constructeur statique n'a jamais été exécuté lors de la création d'objets et par conséquent mon usine Nhibernate session est nulle.
Je suis sûr qu'il me manque quelque chose ici. Quelqu'un pourrait m'aider à comprendre quelle est la bonne façon d'utiliser le constructeur statique dans Ninject?
Merci
Vous n'avez pas besoin de définir votre unité de travail statique. Il devrait fonctionner sans mot-clé statique – OrcusZ
Si je ne le mets pas en statique, avec ma configuration de liaison Ninject actuelle, il en résulterait que le CIO Ninject crée des fabriques de session séparées pour chaque résolution. – Dinny