2

私は WCF サービス (IIS でホストされている) を作成しています。Nuget から Ninject (3.0.0.0、WCF 拡張機能付き) と NHibernate をダウンロードしました。これらを MVC コンテキストで一緒に使用しましたが、WCF ではまだ使用していません。サービスへの呼び出しごとに新しいセッションが必要です。しかし、それを達成する方法についての良いチュートリアルが本当に見つかりません。

今のところ、これを "NinjectWebCommon.cs" ファイルに入れます (MVC プロジェクトで行っているように)。

private static void RegisterServices(IKernel kernel)
{
    var helper = new NHibernateHelper(WebConfigurationManager.ConnectionStrings["xx"].ConnectionString, Assembly.GetAssembly(typeof(Template)));
    kernel.Bind<ISessionFactory>().ToConstant(helper.SessionFactory).InSingletonScope();
    kernel.Bind<IDbSessionFactory>().To<DbSessionFactory>().InSingletonScope();
    kernel.Bind<IDbSession>().To<DbSession>().InRequestScope();

    //Repository
    //Bind the repository stuff here
}      

しかし、これは私が期待するように実際には機能していません。誰かが私がここで間違っていることを教えてもらえますか?

編集

もう少し詳しく。サービスが開始されると、NHibernate セッション オブジェクトが起動されることがわかります。しかし、実際には破棄に失敗します。セッションを閉じようとすると、NullReferenceException が発生します。Nugetの最新バージョンをすべて使用しています。

4

1 に答える 1

1

Globalからアプリケーション クラスを継承する必要がありますNinjectWcfApplication

public class Global : NinjectWcfApplication
{
    #region Overrides of NinjectWcfApplication

    /// <summary>
    /// Creates the kernel that will manage your application.
    /// </summary>
    /// <returns>The created kernel.</returns>
    protected override IKernel CreateKernel()
    {
        IKernel kernel = new StandardKernel( new ServiceModule() );
        return kernel;
    }

    #endregion
}

https://github.com/ninject/ninject.extensions.wcf/tree/Maintenance_2.2/src/Examples

于 2012-06-08T13:50:54.610 に答える