Nhibernate StructureMap是否具有与NInject'对应的作用域;s定义名称范围/名称范围?

Nhibernate StructureMap是否具有与NInject'对应的作用域;s定义名称范围/名称范围?,nhibernate,dependency-injection,ninject,structuremap,Nhibernate,Dependency Injection,Ninject,Structuremap,我想解决的问题是在IXYZ存储库之间共享ISessionProvider(其中ISessionProvider保存当前的NHibernate ISession) 我正在调整来自的“为每个演示者设置会话”配方,并希望保留StructureMap(棕地项目)。我认为您必须创建一个自定义生命周期来实现这一点,尽管我不确定您到底想要实现什么 要创建自定义生命周期,只需实现ILifecycle接口并在注册中使用它。下面是一个您可以查看的示例:.在web应用程序中,我将Singleton用于sessionF

我想解决的问题是在IXYZ存储库之间共享ISessionProvider(其中ISessionProvider保存当前的NHibernate ISession)


我正在调整来自的“为每个演示者设置会话”配方,并希望保留StructureMap(棕地项目)。

我认为您必须创建一个自定义生命周期来实现这一点,尽管我不确定您到底想要实现什么


要创建自定义生命周期,只需实现ILifecycle接口并在注册中使用它。下面是一个您可以查看的示例:.

在web应用程序中,我将Singleton用于sessionFactory和会话: 这是我的structuremap注册表:

public class NhibernateRegistry: Registry
{
    public NhibernateRegistry()
    {
        For<ISessionFactory>()
        .Singleton()
        .Use(new NHibernateSessionFactory(connectionString).SessionFactory);

        For<ISession>()
        .HybridHttpOrThreadLocalScoped()
        .Use(o => o.GetInstance<ISessionFactory>().CurrentSession);
    }
}
我使用通用存储库:

public class GenericRepository<T> : IGenericRepository<T> where T : class
{
    private readonly ISession _session;

    public GenericRepository(ISession session)
    {
        _session = session;
    }

    public T Load(Guid Code)
    {
        return (_session.Load<T>(Code));
    }

}
公共类GenericRepository:IGenericRepository其中T:class
{
专用只读会话;
公众一般报告(会议期间)
{
_会话=会话;
}
公共T加载(Guid代码)
{
返回(_session.Load(代码));
}
}
但是您可以通过自己的实现轻松地更改它。 我在此处注册存储库:

public class RepositoriesRegistry : Registry
{
    public RepositoriesRegistry()
    {
        For <Data.IRepository<Domain.Reminder, Guid>>()
            .HybridHttpOrThreadLocalScoped()
            .Use<Data.NH.Repository<Domain.Reminder, Guid>>();
    }
}
公共类存储注册表:注册表
{
公共回购登记()
{
对于()
.HybridHttpOrthReadLocalScope()文件
.使用();
}
}
public class RepositoriesRegistry : Registry
{
    public RepositoriesRegistry()
    {
        For <Data.IRepository<Domain.Reminder, Guid>>()
            .HybridHttpOrThreadLocalScoped()
            .Use<Data.NH.Repository<Domain.Reminder, Guid>>();
    }
}