Eh bien, il existe plusieurs méthodes d'accès ISessionFactory en application de statefull (et une application de bureau est ce genre d'application), parmi lesquels:
Singleton Vous pouvez construire une fois l'usine de la session au cours le démarrage de votre programme et l'accès à travers une classe de singleton statique. Cela forcerait l'application à n'utiliser qu'une seule instance de la fabrique de sessions.
exemple:
public sealed class NHibernateHelper
{
private static ISessionFactory SessionFactory;
private static readonly Configuration NhibernateConfig;
// ....
static NHibernateHelper()
{
NhibernateConfig = new Configuration().Configure();
SessionFactory = NhibernateConfig.BuildSessionFactory();
}
public static ISessionFactory GetSessionFactory()
{
return SessionFactory;
}
// ....
}
... et accéder à l'usine de la session par la méthode GetSessionFactory dans toute l'application.
Contexte objet et/ou injection de dépendances
Vous pouvez construire l'usine de la session de configuration et passer à travers un objet de contexte dans toute l'application.
exemple:
lors du démarrage:
// here you configure NHibernate.
ISessionFactory _sessionFactory = BuildMySessionFactory();
// ...
ObjectFactory.Initialize(x =>
{
x.For<IPatientRepository>()
.Use<StandardPatientRepository>()
.Ctor<ISessionFactory>().Is(_sessionFactory);
// ... initialize the rest of your repositories...
});
alors:
public class StandardPatientRepository : IPatientRepository
{
private readonly ISessionFactory _sessionFactory;
public StandardPatientRepository(ISessionFactory sessionFactory)
{
if (sessionFactory == null)
throw new ArgumentNullException("sessionFactory");
_sessionFactory = sessionFactory;
}
public virtual Patient Get(Guid id)
{
using (IStatelessSession session =
_sessionFactory.OpenStatelessSession())
{
return session.Get<Patient>(id);
}
}
// the rest of data-access methods.
}
alors dans vos classes qui utiliseront des données (p. utiliser les dépôts) vous utiliserez:À mon avis, la deuxième méthode est préférable car je pense que dans la plupart des cas, un singleton est un anti-pattern. La seconde approche vous donnera plus de contrôle sur votre couche de données, vous saurez qui et quand y accéder.
Salut Karim merci. Pourriez-vous m'envoyer une petite application de bureau en tant qu'échantillon? –
quel est votre e-mail? –