Assurez-vous que NHibernate SessionFactory n'est créé qu'une seule fois

J'ai écrit une NHibernateSessionFactory classe qui détient une statique Nhibernate ISessionFactory. Ce est utilisé pour s'assurer que nous n'avons qu'une seule session de l'usine, et la première fois OpenSession() est appelé, je créer le actuall SessionFactory - la prochaine fois je utiliser le même et ouvrir une session sur elle. Le code ressemble à ceci:

public class NhibernateSessionFactory : INhibernateSessionFactory
{
    private static ISessionFactory _sessionFactory;

    public ISession OpenSession()
    {
        if (_sessionFactory == null)
        {
            var cfg = Fluently.Configure().
                Database(SQLiteConfiguration.Standard.ShowSql().UsingFile("Foo.db")).
                Mappings(m => m.FluentMappings.AddFromAssemblyOf<MappingsPersistenceModel>());
            _sessionFactory = cfg.BuildSessionFactory();
            BuildSchema(cfg);
        }
        return _sessionFactory.OpenSession();
    }

    private static void BuildSchema(FluentConfiguration configuration)
    {
        var sessionSource = new SessionSource(configuration);
        var session = sessionSource.CreateSession();
        sessionSource.BuildSchema(session);            
    }
}

Maintenant j'ai un problème. Mon application est divisée entre le client et le serveur. Le Nhibernate des choses est sur le côté serveur. Au démarrage de mon serveur et client veut accéder à la base de données par le biais de certains services qui va utiliser le NhibernateSessionFactory. Le résultat est une condition de course à savoir si le _sessionFactory est créé avant que la demande vient de la part du client. Si elle ne l'est pas, il va échouer..

Je suppose que j'ai besoin d'une sorte de queue ou d'attendre le mécanisme de la NhibernateSessionFactory, mais je ne suis pas sûr de savoir quoi faire. Quelqu'un a eu le même problème avant? Quelle est la meilleure solution?

source d'informationauteur stiank81