【问题标题】:Converting this ninject 1.0 code to ninject 2.0将此 ninject 1.0 代码转换为 ninject 2.0
【发布时间】:2011-01-22 23:38:32
【问题描述】:

我正在尝试学习本教程http://damianm.com/tech/nhibernate-mvc-and-ninject/

但我遇到了一些问题,我相信它们与发布 2.0 时所做的更改有关

我从未使用过 ninject 1.0,而且我使用 ninject 2.0 的时间不到一周,所以我发现很难转换。

我觉得这个

//1.0
    Bind<ISessionFactory>().ToProvider(new SessionFactoryProvider()).Using<SingletonBehavior>();

需要改成

//2.0
      Bind<ISessionFactory>().ToProvider(new SessionFactoryProvider()).InSingletonScope();

这个

//1.0
     Bind<ISession>().ToProvider(new SessionProvider()).Using<OnePerRequestBehavior>();

//2.0
    Bind<ISession>().ToProvider(new SessionProvider()).InRequestScope();

这些我找不到他们会是什么

// 1.0 -SimpleProvider
public class SessionProvider : SimpleProvider<ISession>
public class SessionFactoryProvider : SimpleProvider<ISessionFactory>

以上是我目前确定的需要转换的内容。

我也在他的一个存储库类中看到了这一点

Bind<IRepository<Post>>().To<Repository<Post>>();

我不知道那到底是为了什么。

【问题讨论】:

    标签: ninject ninject-2


    【解决方案1】:

    SimpleProvider 改为 Provider

    public class SessionProvider : Provider<ISession>
    public class SessionFactoryProvider : Provider<ISessionFactory>
    

    【讨论】:

    • 谢谢,那我找对了。我想知道你是否知道 InRequestScope();会自动关闭休眠会话之类的东西吗?
    • 最新版本的 Ninject 更改了默认行为是立即释放和处置 InRequestScope 对象。要关闭事务,您必须在会话处置或停用操作中执行此操作。
    • 那么我的会话将按原样关闭,因为它们在请求范围内。我只需要担心关闭交易吗?什么是停用操作。我在想,当我进行提交时,我只使用 using 语句并让它自行关闭。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 2016-03-09
    • 1970-01-01
    相关资源
    最近更新 更多