我有我想通过 MEF 导出的课程。在本例中,它是字符串类型的 Displayer,但在程序中会出现许多特殊类型的 Displayer。我将执行 ImportMany<*IDisplayer> 以获取可用显示器的列表,我将从该列表中选择显示器,以显示给定的对象。
我的问题是如何保存 Display 方法类型?还是投入其中类型安全?并且仍然可以通过 MEF 使用 Displayer。
PS 使用 MEF 我无法制作像 IDisplayer<*T> 这样的界面,因为我将无法获得 ImportMany<*IDisplayer<*T>> 之类的东西。
[DisplayableTypes(typeof(String))]
public class StringObjectDisplayer : IDisplayer
{
public void Display(object objectToDisplay)
{
var displayableObject = (string)objectToDisplay;
}
private Type GetAttributeParamenters()
{
return GetType().GetCustomAttributes(typeof(DisplayableTypesAttribute), true).OfType<DisplayableTypesAttribute>().First().SupportedType;
}
}
public class DisplayableTypesAttribute : ExportAttribute, IExportableElement
{
public DisplayableTypesAttribute(Type supportedType)
: base(typeof(IDisplayer))
{
SupportedType = supportedType;
}
public Type SupportedType { get; private set; }
}
public interface IDisplayer
{
void Display(object objectToDisplay);
}
public interface IExportableElement
{
Type SupportedType { get; }
}