mefx 未列出进口商

发布于 2024-12-10 17:41:08 字数 784 浏览 0 评论 0原文

我有一个基于 MEF 的模块化应用程序,它开始无法导入类。在调试过程中,我一直使用 mefx 工具来尝试找出核心问题。简而言之,我的所有 [Export] 声明似乎都是正确的,但 ImportImportMany 属性似乎都没有得到正确处理。

希望这对我来说是一个简单的错误,但该应用程序直到最近才工作。

这是我编写的一个非常简短的测试应用程序以及相应的 mefx 输出。

using System.ComponentModel.Composition;

namespace ClassLibrary1
{
    public class Class1
    {
        [Import]
        public Class2 myclass;
    }

    [Export]
    public class Class2
    {
    }
}

我希望mexf 输出

> mefx /file:ClassLibrary1.dll /parts
ClassLibrary1.Class2

> mefx /file:ClassLibrary1.dll /exports
ClassLibrary1.Class2

> mefx /file:ClassLibrary1.dll /imports
[blank]

Class1 列为导入器。建议?

I have a MEF-based modular app that has started to fail to import classes. In the course of debugging, I've been using the mefx tools to try to track down the core issue. In short, all of my [Export] declarations appear to be correct, but none of the Import or ImportMany attributes seem to be processed correctly.

Hopefully this is a simple mistake on my part, but the application was working until recently.

Here is a very short test application I've written along with the corresponding mefx output.

using System.ComponentModel.Composition;

namespace ClassLibrary1
{
    public class Class1
    {
        [Import]
        public Class2 myclass;
    }

    [Export]
    public class Class2
    {
    }
}

And the mexf output

> mefx /file:ClassLibrary1.dll /parts
ClassLibrary1.Class2

> mefx /file:ClassLibrary1.dll /exports
ClassLibrary1.Class2

> mefx /file:ClassLibrary1.dll /imports
[blank]

I would have expected Class1 to be listed as an importer. Suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

指尖上的星空 2024-12-17 17:41:08

您不能导入 MEF 未引用的类。

尝试:

namespace ClassLibrary1
{
    [Export]
    public class Class1
    {
        [Import]
        public Class2 myclass;
    }

    [Export]
    public class Class2
    {
    }
}

您也可以在构造函数中导入它:

namespace ClassLibrary1
    {
        [Export]
        public class Class1
        {
            [ImportingConstructor]
            public Class1(Class2 c2)
            {
                myclass = c2;
            }

            public Class2 myclass;
        }

        [Export]
        public class Class2
        {
        }
    }

另外,使用 ServiceLocator 获取 Class1(不要使用“new”关键字)。

Class1 myClass1 = ServiceLocator.Current.GetExport<Class1>();

You cannot import in a class not referenced by MEF.

Try:

namespace ClassLibrary1
{
    [Export]
    public class Class1
    {
        [Import]
        public Class2 myclass;
    }

    [Export]
    public class Class2
    {
    }
}

You could also import it in the constructor:

namespace ClassLibrary1
    {
        [Export]
        public class Class1
        {
            [ImportingConstructor]
            public Class1(Class2 c2)
            {
                myclass = c2;
            }

            public Class2 myclass;
        }

        [Export]
        public class Class2
        {
        }
    }

Also, use the ServiceLocator to get Class1 (don't use the "new" keyword).

Class1 myClass1 = ServiceLocator.Current.GetExport<Class1>();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文