1

我有我想通过 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; }
}
4

0 回答 0