我用這個approuch http://www.kevinwilliampang.com/2010/04/06/setting-up-asp-net-mvc-with-fluent-nhibernate-and-structuremap/設立FNH與structuremap但一個請求後,我得到下面的異常設置功能NHibernate和StructureMap爲Web應用程序
會話關閉! 對象名稱:'ISession'。
描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。
異常詳細信息:System.ObjectDisposedException:會話已關閉! 對象名稱:'ISession'。
我的倉庫類看起來是這樣的:
public class Repository : IRepository {
private readonly ISession _session;
public Repository(ISession session) {
_session = session;
}
public T Get<T>(Expression<Func<T, bool>> predicate) {
return _session.CreateCriteria(typeof(T)).Add(predicate).UniqueResult<T>();
}
和我登記我的倉庫中structuremap這樣的:
public class RepositoryRegistry : Registry {
public RepositoryRegistry() {
Scan(a => {
a.AssembliesFromApplicationBaseDirectory();
a.AddAllTypesOf<IRepository>();
});
}
}
我怎樣才能防止被關閉會話?
是的,ISession的註冊看起來完全一樣。唯一註冊爲Singleton的是ISessionFactory,雖然它與示例中的相似。你有什麼想法,我可以開始尋找一個錯誤? – Marcus 2010-10-01 05:32:48
嗯,這很奇怪,你可以看看ObjectFactory.WhatDoIHave()的輸出,看看它是否看起來像是正確註冊的。某些東西的範圍必須錯誤,或者您明確地在某個地方關閉會話。 – 2010-10-01 17:21:26
該錯誤似乎發生在我的sitemapprovider。因爲構造函數必須具有一個空的默認構造函數,所以我在構造函數中使用ObjectFactory.GetInstance(),這似乎是問題所在? public class MvcSiteMapProvider:SiteMapProvider {0}私有IRepository _repository; public MvcSiteMapProvider(){ _repository = ObjectFactory.GetInstance (); } } –
Marcus
2010-10-03 20:28:21