首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MEF上下文中使用泛型

在MEF上下文中使用泛型
EN

Stack Overflow用户
提问于 2019-01-04 20:18:30
回答 1查看 73关注 0票数 1

我想将泛型与mef-“ImportMany(.)”结合使用,但我得到了编译错误。

下面没有使用泛型的代码工作得很好:工厂类"HelperOneFactory“(见下文)正在搜索"IHelperOne"-interface的所有实现。从这个列表中,它获得了第一个没有元数据值的“原始”。如果它不存在,它接受第一个而不检查元数据值。

代码语言:javascript
复制
/// =====================================================================================
/// factory-implementation for interface-type "IHelperOne"  (==> works fine)
/// =====================================================================================
[Export(typeof(HelperOneFactory))]
public class HelperOneFactory: IPartImportsSatisfiedNotification
{
    [ImportMany(typeof(IHelperOne))]
    private IEnumerable<Lazy<IHelperOne, Dictionary<string, object>>> Helper;

    /// <summary>
    /// reference to the relevant implementaion (HelperOneOriginal or HelperOneCusto)
    /// </summary>
    public IHelperOne Current { get; private set; }

    /// <summary>
    /// looking for all implementations of IHelperOne to find out the one to use
    /// </summary>
    public void OnImportsSatisfied()
    {
        Current = Helper.Count() > 1 ? Helper.First<Lazy<IHelperOne, Dictionary<string, object>>>(s => !s.Metadata.ContainsValue("Original")).Value :
            Helper.First<Lazy<IHelperOne, Dictionary<string, object>>>().Value;
    }

这很好,但我必须为许多接口类型实现工厂类。因此,我尝试将泛型用于接口类型的,但随后得到编译错误(使用.NET Framework4.6.1):

代码语言:javascript
复制
/// =====================================================================================
/// a version with using generic ==>  compiler-errors !!
/// =====================================================================================
[Export(typeof(HelperTemplateFactory<>))]
public class HelperTemplateFactory<THelperInterface> : IPartImportsSatisfiedNotification
{
    [ImportMany(typeof(THelperInterface))]            // ==> ERROR:       "Attribute argument cannot use type parameters"
    [ImportMany(THelperInterface)]                    // ==> also ERROR:  "Type parameter name is not valid at this point"
    private IEnumerable<Lazy<THelperInterface, Dictionary<string, object>>> Helper;

    ...

是否可以为"ImportMany“命令使用泛型类型?

问题的上下文:

“普通”类"HelperOneOriginal“是HelperOne的标准版本,可以通过定义一个子类"HelperOneCustom”来覆盖自定义项目,该子类位于单独的VisualStudio中。这两个类都有接口"IHelperOne“。

主程序应该使用自定义类(如果定义的话),或者使用原始类.原始类具有元数据-信息“原始”。因此,"HelperOneFactory“查找"IHelperOne"-Interfaces的所有实现,并获取第一个没有元数据的”原始“。如果它不存在,它就会接受原来的类。对HelperClass中存储在成员"Current“中的相关类ist的引用,以供主程序使用。

如果有必要,可以提供一个小的测试项目。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-06 11:13:29

我建议,我必须写一个“答案”来标记als“解决”=>的问题

代码语言:javascript
复制
a line with only    "[ImportMany]"   is the solution!

感谢戴夫·M

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54045481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档