Ich habe eine Unit of Work Wrapper für meine Nhibernate Datenzugriffsmethoden erstellt. Ich initialisiere meine Session Factory im Static Constructor der UnitOfWork-Klasse, in der Hoffnung, sie einmalig initialisieren zu können.Erstellen Sie eine ninject Abhängigkeit mit statischen Konstruktor
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();
}
}
ich dann binde diese unitOfWork Abhängigkeit mit Ninject Kernel während meines Starts der Anwendung und dann erwarten, dass Ninject es in meinen Daten des Zugangs Repository Konstruktor zu lösen. (Ich verwende Constructor-Injektion).
public class Module : NinjectModule
{
public override void Load()
{
Bind<IUnitOfWork>().To<UnitOfWork>();
}
}
Aber nach Auflösung, konnte ich verstehen, dass der Code innerhalb des statischen Konstruktor nie bei der Objekterstellung und als Ergebnis meiner Nhibernate Session Fabrik ist null ausgeführt wurde.
Ich bin mir sicher, dass mir hier etwas fehlt. Könnte jemand mir helfen zu verstehen, wie man den statischen Konstruktor in Ninject richtig benutzt?
Dank
Sie müssen Ihre Arbeitseinheit nicht statisch einstellen. Es sollte ohne statisches Schlüsselwort funktionieren. – OrcusZ
Wenn ich es nicht mit meiner aktuellen Ninject-Bindungskonfiguration auf statisch setze, würde dies dazu führen, dass Ninject IOC separate Session Factories für jede Auflösung erstellt. – Dinny