2017-08-08 33 views
0

我想在成功登錄後顯示主窗口。我使用interface作爲參數在主窗口中的構造函數。現在,當我嘗試顯示主窗口時,出現錯誤,因爲我無法將接口作爲參數傳遞給主窗口。我看到了很多類似於我的帖子,但我認爲它們與它們完全不同。顯示窗體包含接口作爲構造函數的參數WPF

這是我的主要窗口構造函數:

public Home_Page(IGetAllItemClass clas) 
     { 
      InitializeComponent(); 
      _allClass = clas; 
     } 
     IGetAllItemClass _allClass; 

我在登錄窗口代碼,我需要證明主要形式有:

Home_Page h = new Home_Page(); 
h.ShowDialog(); 

我的App.xaml:

<Application x:Class="Cafe_WPF.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:local="clr-namespace:Cafe_WPF" 
      Startup="App_Startup"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="scroll_style.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

這是我的App.cs:

public partial class App : Application 
    { 
     void App_Startup(object sender, StartupEventArgs e) 
     { 
      #region login_dependencies 
      var container = new UnityContainer(); 
      container.RegisterType<IGetIP, get_ip_address>(); 
      container.RegisterType<IUserDetails, get_user_details>(); 
      container.RegisterType<IgetBusinessDetailsFromPosId, get_business_info_from_pos>(); 
      #endregion 
      #region home_page_dependencies 
      var home = new UnityContainer(); 
      container.RegisterType<IGetAllItemClass, get_all_item_class>(); 
      Home_Page hm = home.Resolve<Home_Page>(); 
      #endregion 
      Login_Window lg = container.Resolve<Login_Window>(); 
      lg.ShowDialog(); 
     } 
    } 

這是我的接口:

namespace Cafe_WPF.Interface 
{ 
    public interface IGetAllItemClass 
    { 
     DataTable item_class(string business_info_id, string rvc_id); 
    } 
} 

我的一流服務實現接口:

class get_all_item_class : IGetAllItemClass 
{ 
    public DataTable item_class(string business_info_id, string rvc_id) 
    { 
     try 
     { 
      string sql = //query 
      return CafePOS.Library.DataAccessLayer.Instance.ExecuteQuery(sql); 

     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
    } 
} 

我試圖使用依賴injection.May是我失去了一些東西。誰可以幫我這個事 ?我困在此。

+0

你在使用棱鏡嗎? –

+0

@RandyLevy先生我正在使用Unity.I完全是WPF的新手。 –

+0

你確定它沒有錯?var home = new UnityContainer(); container.RegisterType (); Home_Page hm = home.Resolve ();'?我的意思是你創建'home'容器,然後嘗試使用另一個容器來解析'Home_Page'。 順便說一句,你很奇怪你在你的情況下使用兩個不同的容器 –

回答

0

你需要傳遞的依賴與構造 var home = new HomePage(myDependencyInterface); 如果你沒有這種依賴性實例化登錄頁面中那麼你就先用你的統一的容器來解決它: var myDependencyInterface = container.Resolve<myDependencyInterface>();

另外,作爲問在你的問題的評論中,你是否在使用棱鏡? 因爲如果是這樣,你只需要使用NavigateAsync(nameof(HomePage));和Unity將注入依賴關係

+0

這不是我想要的先生。手動傳遞接口減少了我對DI的期望。你能否在Unity中給我建議,但不要在Prism中? –

+0

首先棱鏡和Unity是互補的(你應該研究MVVM DI的做法)。第二我不確定你真的明白我在說什麼。通過讓容器解析de依賴並將它注入到HomePage構造函數IS依賴注入中。 – Augure

+0

我理解你的解釋先生。我的意思是主頁將有接口作爲構造函數的參數。無論何時我需要顯示主頁,我必須通過其中的接口實例。那變得緊密耦合我想。 –

相關問題