使用MEF,我可以创建和加载这样的类型:var view = Container.GetExportedValue<MyView>();现在我要做的是:Type t = typeof(MyView);var view = Container.GetExportedValue<t>();(当然,该类型可能包含与MyView不同的内容)。使用泛型GetExportedValue 是不可能的-还有其他方法可以实现吗? (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 您可以使用反射。这是一个例子:using System;using System.ComponentModel.Composition;using System.ComponentModel.Composition.Hosting;using System.Linq;using System.Reflection;namespace WindowsFormsApplication1{ static class Program { [STAThread] static void Main() { AggregateCatalog catalog = new AggregateCatalog(); catalog.Catalogs.Add(new AssemblyCatalog(typeof(IMessage).Assembly)); CompositionContainer container = new CompositionContainer(catalog); Type t = typeof(IMessage); var m = container.GetExportedValue(t); } } public static class CompositionContainerExtension { public static object GetExportedValue(this ExportProvider container, Type type) { // get a reference to the GetExportedValue<T> method MethodInfo methodInfo = container.GetType().GetMethods() .Where(d => d.Name == "GetExportedValue" && d.GetParameters().Length == 0).First(); // create an array of the generic types that the GetExportedValue<T> method expects Type[] genericTypeArray = new Type[] { type }; // add the generic types to the method methodInfo = methodInfo.MakeGenericMethod(genericTypeArray); // invoke GetExportedValue<type>() return methodInfo.Invoke(container, null); } } public interface IMessage { string Message { get; } } [Export(typeof(IMessage))] public class MyMessage : IMessage { public string Message { get { return "test"; } } }}关于c# - MEF:从类型获取GetExportedValue吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4602625/ (adsbygoogle = window.adsbygoogle || []).push({});
10-09 01:00