2012-04-02 65 views
4

我有Unity配置錯誤。 我想實現http://unitymvc3.codeplex.com/,但我stucked現在,因爲這樣:統一和生命週期管理配置 - 總是瞬間生命期管理器

在我的統一配置我有這樣的設置:

<register type="IMainDbContext" mapTo="WorkflowContext"> 
    <lifetime type="hierarchical" /> 
    <constructor></constructor> 
    </register> 

但在創造團結的時間(我的簡單代碼是在這裏:)除了具有LifetimeManagerType = {Name = "TransientLifetimeManager" FullName = "Microsoft.Practices.Unity.TransientLifetimeManager"}註冊「IManDbContext」的

UnityConfigurationSection section = ConfigurationManager.GetSection("unity") as UnityConfigurationSection; 
     if (section != null) 
     { 
      section.Configure(container); 
     } 

     this.container = container; 

一切配置偉大,但它應該是hierarchical lifetime manager

你有什麼想法如何告訴團結(在配置中,而不是在代碼中)我想要層次結構生命管理器? 感謝您的任何提示。

回答

2

我的錯誤是造成此錯誤: 我有多個的DbContext,但他們竟被配置:

<register type="IMainDbContext" mapTo="WorkflowContext"> 
    <lifetime type="hierarchical" /> 
    <constructor></constructor> 
</register> 

<register type="IReportDbContext" mapTo="SomeBadContext"> 
    <lifetime type="hierarchical" /> 
    <constructor></constructor> 
</register> 

當我使用這個配置,這是不好的,團結簡單不`噸配置任何一生經理。在我將這些背景設置正確後,團結使用了我的終生經理配置。

0

我不認爲你可以。如果您指定了生命週期類型,則需要提供「單身」或「外部」(外部是自定義生命週期)。

Link to Unity Schema Documentation

公平地說,除非你使用多個統一容器我沒有看到具有層次一生經理的價值,因爲這是爲了確保你只有你的類型的一個實例在主統一容器中實例化以及您從其生成的任何子容器

所以,除非你打算生成子容器,並且需要一個單獨的IMainDbContext實例來擴充對象,否則你可能只使用「singleton」生存管理器。

+0

您爲舊配置架構指出的文檔鏈接,在頁面頂部顯然標記爲廢棄。你可以在配置中指定層次結構,這是一個默認的別名。有關更多詳細信息,請參閱[默認別名列表](http://msdn.microsoft.com/zh-cn/library/ff660933(v = pandp.20).aspx)。 – 2012-04-05 02:48:48

+0

非常感謝您的幫助,請購買我可以肯定使用層次結構生命期管理器。最後它是由我的愚蠢造成的,因爲我使用了更多的數據庫上下文,並且他們的配置很糟糕。 – clpx 2012-04-06 12:28:18

+0

解決方案是什麼?你應該把它作爲你自己問題的答案發布 – 2012-04-09 20:11:50

相關問題