0

我正在構建一個基於WPF的應用程序。我正在使用Unity在我的應用程序中注入所有不同的依賴項(在App.xaml.cs中定義)。 在我的MainApplication窗口中,我有一個從Control派生出來的非常複雜的無看起來的自定義控件(集成了約10個控件)。 我想注入一個虛擬機到這個自定義控件,而無需將其耦合到我的應用程序中的任何其他對象(當然除了App.xaml.cs)使用Unity將注入VM到WPF中的自定義控件

注入到我的應用程序中的任何WPF窗口運行良好,但是當我嘗試注入到我面臨的不同情況的自定義控件: 1.如果我使用的是 container.RegisterInstance(container.Resolve);

DI創建MyCustomControl的虛擬實例並注入VM(使用[Dependency]屬性)。

在這種情況下,它初始化一個新的MyCustomControl忽略任何依賴關係:然而,當我在XAML中使用它這個具體的實例沒有使用。

  1. 如果我正在使用 container.RegisterType();

MyCustomControl完全忽略注入。

我意識到我可能做錯了事(不只是技術上),我真的試圖避免耦合這種控制(這顯然會解決問題)。

回答

0

我不知道這是否是最好的解決方案,並且在尋找其他選項時發現了您的問題,但是,唉,這裏是我過去至少啓動和運行的方法。

我創建了一個基類UnityControl類,其子類爲Control。在構造函數中,我使用ServiceLocator來獲取對容器的引用。然後我調用BuildUp方法來解決派生控件類的任何依賴關係。任何依賴項都被實現爲用DependencyAttribute標記的讀/寫屬性。

這裏的UnityControl樣子:

public abstract class UnityControl : Control 
{ 
    protected UnityControl() : base() 
    { 
     Container = ServiceLocator.Current.GetInstance<IUnityContainer>(); 
     Container.BuildUp(this.GetType(), this); 
    } 

    protected IUnityContainer Container { get; private set; } 
}