Frage

Ich entwickle WPF-Anwendung mit MVVM Design. Als MVVM Rahmen verwende ich Caliburn Micro. Service Ich habe in externe Montage, und es ist im Hinblick auf Modelle Klassen mit MEF injiziert.

Problem in Service, den ich viele kleine Klasse haben, versuche ich SOLID principe respektieren.

[Export(typeof(IClassA)]
public class ClassA : IClassA
{}

[Export(typeof(IClassB)]
public class ClassB : IClassB
{}

[Export(typeof(IClassC)]
public class ClassC : IClassC
{}

//...
[Export(typeof(IClassK)]
public class ClassK : IClassK
{}

Klassen zählen ist etwa 12-15.

muss ich diese Klassen im Hinblick auf Modellklasse verwenden. Also ich benutze diese:

public class MyViewModelClass
{
 private interface IClassA _a;
 private interface IClassB _b;
 private interface IClassC _c;


//...
 private interface IClassK _k;


[ImportingConstructor]
public MyViewModelClass(IClassA a, IClassB b, IClass c, ..., IClassK k)
{
_a=a; _b=b; _c=c; ...  _k=k

}

}

Ich glaube nicht, dass diese Art und Weise ist richtig. Oder es existiert etwas elegant, einfach. Vielen Dank für Ihre Meinung und Ratschläge.

War es hilfreich?

Lösung

können MEF auf Felder importieren (auch private). Wenn Sie Ihr Leben ein wenig leichter machen möchten, können Sie einfach die Felder mit dem ImportAttribute dekorieren. Wenn Sie wissen wollen, wenn alle Importe abgeschlossen haben, implementieren nur die IPartImportsSatisfiedNotification Schnittstelle:

public class MyViewModelClass : IPartImportsSatisfiedNotification
{
    [Import]
    private IClassA _a; 
    [Import]
    private IClassB _b; 
    [Import]
    private IClassC _c;

    ...

    public void OnImportsSatisfied()
    {
        // add initialization code here
    }
}

Dies ziemlich erfordert, dass Sie MEF verwenden, um sicherzustellen, dass Ihr Ansichtsmodell korrekt instanziiert wird, aber auf Ihrem Szenario abhängig, die möglicherweise keine große Sache sein.

Andere Tipps

An:. Abe Heidbrecht

Ich bin wenig verwirren. Wenn ich diese:

public class MyViewModelClass : IPartImportsSatisfiedNotification
{
    [Import]
    private IClassA _a;  // I need init _a?
    [Import]
    private IClassB _b; 
    [Import]
    private IClassC _c;

    ...

    public void OnImportsSatisfied()
    {
        // what code must be here ?
        //how can I check if all import was success
    }
}

Weil.

IPartImportsSatisfiedNotification hat nur eine einzige Methode:. OnImportsSatisfied, die aufgerufen wird, wenn alle Importe, die erfüllt erfüllt worden sein könnte

Ich denke, es ist besser für Unit-Tests init Schnittstellen von Diensten Klasse in contstructor Sichtmodellklasse.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top