Ich verbrachte mehrere Stunden damit, herauszufinden, wie man Parameter über MEF (System.Composition) an einen Plugin-Konstruktor übergibt, aber alles ohne Erfolg. Natürlich gibt es sehr wenige relevante Dokumente und ein Blick durch den Quellcode hat nicht geholfen.Parameter an den Plugin-Konstruktor über MEF auf .NET Core übergeben?
Dies war mit der CompositionHost.ComposeExportedValue-Methode sehr einfach zu tun, aber in der .NET Core-Version kann ich nichts finden, was funktioniert. Ich habe meinen unvollständigen Code unten eingefügt, gefolgt von der Ausnahme, die ausgelöst wird.
Jede Hilfe in dieser Hinsicht würde sehr geschätzt werden. Danke ....
using System;
using System.Composition;
using System.Composition.Hosting;
using System.Reflection;
namespace MefMe
{
public interface IPlugin
{
void Alert();
}
[Export(typeof(IPlugin))]
public class Plugin : IPlugin
{
private string code;
[ImportingConstructor]
public Plugin(string code)
{
this.code = code;
}
public void Alert() => Console.WriteLine(code);
}
class Program
{
static void Main(string[] args)
{
var config = new ContainerConfiguration()
.WithAssembly(Assembly.GetEntryAssembly());
var container = config.CreateContainer();
// Throws a CompositionFailedException; see notes
var plugin = container.GetExport<IPlugin>();
plugin.Alert();
}
}
}
System.Composition.Hosting.CompositionFailedException aufgetreten
HResult = 0x80131500 Message = Kein Export für den Vertrag 'String' gefunden wurde -> durch Import 'Code' des Teils erforderlich 'Plugin' -> erforderlich von ursprünglichem Antrag auf Vertrag 'IPlugin' Source = Stacktrace: bei System.Composition.Hosting.Core.ExportDescriptorRegistryUpdate.CheckTarget (CompositionDependency Abhängigkeit, HashSet1 checked, Stack
1 Prüfung) bei System.Composition.Hosting. Core.ExportDescriptorRegistryUpdate.CheckDepend Ency (CompositionDependency Abhängigkeit, HashSet1 checked, Stack
1 Kontrolle) bei System.Composition.Hosting.Core.ExportDescriptorRegistryUpdate.CheckTarget (CompositionDependency Abhängigkeit, HashSet1 checked, Stack
1 Kontrolle) bei System.Composition.Hosting.Core.ExportDescriptorRegistryUpdate.Execute (CompositionContract Vertrag) bei System.Composition.Hosting.Core.ExportDescriptorRegistry.TryGetSingleForExport (CompositionContract exportkey, ExportDescriptor & defaultForExport) bei System.Composition.Hosting.Core.LifetimeContext.TryGetExport (CompositionContract Vertrag, Objekt & Export) bei Syste m.Composition.CompositionContext.GetExport (CompositionContract contract) bei System.Composition.CompositionContext.GetExport [TEXPORT] (String contractName) bei MefMe.Program.Main (String [] args) in C: \ Benutzer \ Louis \ Desktop \ MefMe \ MefMe \ Program.cs: Linie 36