2017-08-08 2 views
0

Ich versuche, Hauptfenster nach erfolgreicher Anmeldung zu zeigen. Ich benutzte Schnittstelle als Parameter zum Konstruktor im Hauptfenster. Jetzt, wenn ich versuche, Hauptfenster zu zeigen, erhalte ich einen Fehler, weil ich Schnittstelle als Parameter zum Hauptfenster nicht übergeben kann. Ich sah viele Pfosten wie meins, aber ich dachte, dass es von ihnen ziemlich unterschiedlich ist.zeigt Formular mit Schnittstelle als Parameter zu einem Konstruktor WPF

Das ist mein Hauptfenster Konstruktor:

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

Mein Code in Login-Fenster, von wo aus ich brauche Hauptform zu zeigen:

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

Mein 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> 

Dies ist meine App.cs:

Das ist meine Schnittstelle:

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

Und meine Klasse Service Implementierung Schnittstelle ist:

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; 
     } 
    } 
} 

I Abhängigkeit zu verwenden versuche injection.May sein, die ich bin etwas fehlt. Kann mir jemand dabei helfen? Ich stecke darauf fest.

+0

Verwenden Sie Prism? –

+0

@RandyLevy Sir, ich benutze Unity. Ich bin völlig neu zu WPF. –

+0

Sind Sie sicher, dass es sich nicht um einen Fehler handelt 'var home = new UnityContainer(); container.RegisterType (); Home_Page hm = home.Resolve (); '? Ich meine, Sie erstellen "Home" -Container und versuchen dann, "Home_Page" mit einem anderen Container aufzulösen. Übrigens ist es sehr seltsam, dass Sie in Ihrem Fall zwei verschiedene Behälter verwenden. –

Antwort

0

Sie müssen die Abhängigkeit mit dem Konstruktor var home = new HomePage(myDependencyInterface); passieren Wenn Sie nicht, dass die Abhängigkeit innerhalb Ihrer Login-Seite instanziiert haben, dann haben Sie es mit Ihrem Unity Container lösen zuerst: var myDependencyInterface = container.Resolve<myDependencyInterface>();

auch als gefragt in den Kommentaren Ihrer Frage, verwenden Sie Prism? Wenn ja, müssen Sie nur NavigateAsync(nameof(HomePage)); verwenden und Unity wird die Abhängigkeit injizieren

+0

Das ist nicht, was ich wollte Sir .. Passing-Schnittstelle manuell reduziert meine Erwartung von DI. Könntest du bitte mich in Unity vorschlagen, aber nicht in Prism? –

+0

Zunächst sind Prism und Unity komplementär (Sie sollten sich die MVVM-DI-Praktiken ansehen). Zweitens bin ich mir nicht sicher, ob du wirklich verstehst was ich erzähle. Indem der Container die Abhängigkeit auflöst und sie in Ihren HomePage-Konstruktor IS Dependency Injection einfügt. – Augure

+0

Ich verstand Ihre Erklärung Sir. Ich meinte Startseite wird Schnittstelle als Argument in Konstruktor haben. Wann immer ich Homepage anzeigen muss, muss ich Instanz der Schnittstelle in es übergeben. Das wird enge Kopplung, denke ich. –

Verwandte Themen