MEF Faul ImportMany mit Creationpolicy.Nicht freigegeben
ich bin ein Anfänger in mef und so ich habe eine Frage 🙂
ich habe Folgendes:
[PartCreationPolicy(CreationPolicy.Shared)]
[Export(typeof(SharedExport))]
public class SharedExport : INPCBase
{
[ImportMany(typeof(INonShared),RequiredCreationPolicy = CreationPolicy.NonShared)]
private IEnumerable<Lazy<INonShared,Dictionary<string,object>>> fac;
...
public void Open()
{
foreach (var lazy in fac)
{
this.Muster.Add(lazy.Value);
}
}
den importierten Klassen alle markiert als nicht freigegeben.
[PartCreationPolicy(CreationPolicy.NonShared)]
[Export(typeof(INonShared))]
[ExportMetadata("Muster","030")]
public sealed class NonShared1 : INPCBase, INonShared
{
public NonShared1()
{
Debug.WriteLine("ctor NonShared1" + this.GetHashCode().ToString());
}
#region Implementation of INonShared
public string Displayname
{
get { return "Muster 030 "+ this.GetHashCode().ToString();
}
}
#endregion
}
nun meine Frage: beim aufrufen von Open() ausführen, sollten es nicht immer eine neue NonShared1 Instanz erstellt werden? ich bekam immer die gleiche.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Matthäus ist korrekt über den Gemeinsamen/nicht freigegeben Aspekt nur Auswirkungen auf die Instanz an jedem importieren, werden Sie nicht bekommen eine neue Instanz jedes mal, wenn Sie ziehen auf Faul.Wert. Wenn das, was Sie wollen, ist zu bekommen eine neue Instanz jedes mal und entsorgen Sie es vielleicht schauen Sie in Verwendung von ExportFactory. Derzeit ExportFactory existiert nur in der Silverlight-version von MEF aber es ist ein Beispielprojekt auf mef.codeplex.com fügt hinzu, dass die Funktionalität der desktop-version von MEF, wenn Sie wirklich brauchen diese Funktion.
Nein, weil der Faul<> Instanz. Ein
Lazy<T>
ist konzipiert für lazy loading von einem Wert. Der Wert wird erstellt, wenn Sie erstmals Zugriff auf die.Value
Eigenschaft, und dieselbe Instanz zurückgegeben wird, für alle den Zugang zu, die Immobilie danach. Die nicht freigegeben/Freigegeben Schöpfung Politik ins Spiel kommt, den import-Prozess, also durch die property-injection, constructor injection, Feld-Injektion .GetExportedValue
etc...