asp.net-mvc-3 - MVC3、Unity、NHibernateでのIoCレジスタインスタンスの問題-(codeplexのUnity.MVC3 lib)

asp.net-mvc-3 nhibernate inversion-of-control unity-container

codeplexのUnity.MVC3.dllを使用しており、リクエストごとにNHibernate ISessionのインスタンスを登録しようとしています。 Unity MVC3ドキュメントに従って、これを達成するにはHierarchicalLifetimeManagerを使用する必要があります:

var container = new UnityContainer();
container.RegisterInstance<ISession>(SessionFactory.OpenSession(), new HierarchicalLifetimeManager());
container.RegisterControllers();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));


SessionFactoryは私のGlobal.asaxの静的オブジェクトです。 ISessionをコントローラーの1つに追加すると、次のエラーメッセージが表示されます。


現在のタイプNHibernate.ISessionはインターフェースであり、
建設されました。型マッピングがありませんか?


インスタンスを登録するだけでRegisterTypeは必要ないと思いましたか?

私のコントローラーでは:

[Dependency]
public ISession session { get; set; }


また、ActionResult関数の1つに引数としてISessionを追加してみました

問題はNHibernateの終わりではないことを付け加えます。構成は成功し、データベースから情報を照会するために使用できます。

更新

有効期間マネージャーを指定しない場合は機能しますが、これでは必要な「リクエストごとに1つのインスタンス」が取得されません。

私はNinjectを探さなければならないかもしれません:p
答え
registerinstanceではなく、注入ファクトリでregistertypeを使用してみてください。

何かのようなもの:

Container.RegisterType<ISession>(new InjectionFactory(c => SessionFectory.OpenSession()), new HierarcicalLifetimeManager());
関連記事

asp.net-mvc-3 - jquery $ .post()によってJson()を使用して返されたJSON

css - asp.net mvc3 intellisenseがcssクラスに対して起動しない

c# - 1つのデータベースエントリの合計金額-MVC 3

asp.net-mvc - Html.ActionLinkがルート値を自動的に追加しないようにする

asp.net-mvc-3 - asp.net mvcファイルアップロードクライアント側バリデーター

c# - コントローラー内から部分ビューからHTMLを取得する方法

c# - ASP.NET MVC 3を使用したSQL ServerへのFileUpload

asp.net-mvc - TagBuilderで属性値のHTMLエンコードを無効にする

asp.net-mvc-3 - MVC3はアンカータグでビューを返すことが可能です

asp.net - Solrの使い方