2011-08-10 59 views
0

嗨,我們有一個PRISM WPF MVP應用程序,我們希望在同一模塊中的視圖之間共享數據。由於PRISM默認沒有狀態,所以想知道是否有任何方法可以實現這一點。目前我已經注入了一個字典的國家作爲後端存儲,但問題是它的全局即所有模塊都可用。我真的很想把這個注入作爲模塊特定的範圍。取決於模塊在PRISM WPF應用程序中注入狀態

我相信統一允許基於名稱向同一接口註冊不同的類,不知道我唯一的選擇是爲我的場景利用它。

任何幫助將是偉大的!謝謝!

-ioWint

回答

0

感謝您的更新解決方案。我試圖避免基於名稱的Unity註冊,這會迫使我的Presenter知道模塊狀態註冊密鑰。 我在讀Unity上的stackoverflow帖子,發現這裏的討論Is it possible to override parameter values when using Method Injection with Unity?

經過幾個小時的試驗和錯誤,我結束了實現所需的功能。

我做了什麼:

我有一個BaseClass的我模塊 - > BaseModule:IModule的,我有一個國有資產在它這符合在Infrastructure.Interface定義我IStateService。我在BaseModule()構造函數中實例化這個State屬性。 注意:要採用這種方法,我必須讓我的演示者具有公共IStateService狀態;物業..

在模塊中註冊演示的時候,我指定

<UnityContainer>.RegisterType<MyPresenter, new InjectionProperty("State", State). 

上午它將覆蓋演示其中有名稱爲「國家」的定義模塊的狀態實例值的公共屬性。 通過這種方式,我能夠將Modules State作爲View的每位演示者的狀態。

感謝大家指導我走向一個解決方案。

-ioWint

0

我會同意,確定範圍統一的登記種類與模塊名是開始的地方。

0

將本地(模塊級別)狀態對象注入到所有想要共享狀態的視圖中。如果定義狀態對象的接口對您的模塊是本地的,那麼其他模塊將無法引用狀態對象,因爲它們不能引用該接口。因此:如果模塊A有3個視圖需要一個實現IStatefulContainer(也在模塊A中聲明)的對象,並且IStatefulContainer使用RegisterInstance而不是RegisterType註冊到Unity,那麼您將擁有一個單獨的模塊。

我希望有一個管理狀態的「狀態」服務。這可以讓你在這裏添加更多的功能,如果你需要它,並且是一個更「棱鏡」的方法。

編輯


如果您使用跨模塊的這種狀態的對象,那麼你可以做到以下幾點:

1)將接口將由想要的任何模塊被引用的程序使用它。

組件A

public interface IBlah 
{ 
    string Add(string stateKey, string stateValue); 
} 





Assembly B (referencing Assembly A) 



    public class Module:IModule 
    { 
    private IUnityContainer _container; 

     public Module(IUnityContainer container) 
     { 
      _container=container; 
     } 
     public void Initialize() 
     { 
      IBlah blah1=new BlahContainer(); 
      IBlah blah2=new BlahContainer(); 
      _container.RegisterInstance<IBlah>(blah1,"BlahContainer1"); 
      _container.RegisterInstance<IBlah>(blah2,"BlahContainer2"); 

     } 
    } 

模塊C(引用組件A)

_container.Resolve<IBlah>("BlahContainer1"); 
_container.Resolve<IBlah>("BlahContainer2"); 

基本上,我們定義在裝配我們很高興模塊之間共享的接口。一些項目具有「基礎結構」或常用程序集,其中包含由其他模塊使用的服務接口 - 這很適合。

然後,我們將模塊引用與其中的合約進行組裝。

目前我在這裏依靠「魔術弦」,但有很多方法可以解決這個問題。

希望這個更清楚一點。

+0

沒有它的不工作!雖然在登錄模塊中,我已經註冊了一個範圍內部的實例,當下一個模塊加載時通過統一解析給出了登錄狀態。最後一個註冊的實例被返回,給我幾秒鐘的幻想,就好像它在工作!祝你好運! – ioWint

+0

閱讀有關統一,從這個http://stackoverflow.com/questions/1550007/unity-what-are-the-injectionmembers-in-registertype-calls-我想我應該工作的方式就像說容器重寫值時解決我的模塊中的意見。假設我爲我的模塊創建了一個狀態,並且可能會在模塊加載中註冊視圖期間將其作爲覆蓋值。 – ioWint

+0

啊 - 所以你加載在多個模塊的接口?在這種情況下,在模塊中聲明接口將不起作用,因爲其他模塊無法訪問它。我會用一些代碼示例和替代方法更新我的答案。 –

相關問題