为什么SatisfyImportsOnce方法不能使用object参数?

时间:2014-10-25 17:48:53

标签: c# .net

我一直关注这个关于CompositionContainer类(System.ComponentModel.CompositionHosting)的MSDN示例:

[Export]
class MyAddin
{
    public String myData { get { return "The data!"; } }
}

class MyProgram
{
    [Import]
    public MyAddin myAddin { get; set; }
}


class Program
{
    static void Main(string[] args)
    {
        AggregateCatalog catalog = new AggregateCatalog();
        catalog.Catalogs.Add(new AssemblyCatalog(typeof(MyAddin).Assembly));
        CompositionContainer _container = new CompositionContainer(catalog);
        MyProgram myProgram = new MyProgram();
        _container.SatisfyImportsOnce(myProgram);
        Console.WriteLine(myProgram.myAddin.myData);
        Console.ReadLine();

        _container.Dispose();
    }
}

但是当我尝试编译它时,会生成以下错误消息:

  

错误2最佳重载方法匹配   'System.ComponentModel.Composition.Hosting.CompositionContainer.SatisfyImportsOnce(System.ComponentModel.Composition.Primitives.ComposablePart)'   有一些无效的   参数X:\ Dev \ S-L \ CSharp \ EtceteraSolution \ CompositionContainer_Demo \ CompositionContainer_Main.cs 15 13 CompositionContainer_Demo

Invalid arguments for <code>SatisfyImportsOnce</code> method.

示例来源:http://msdn.microsoft.com/en-us/library/system.componentmodel.composition.hosting.compositioncontainer%28v=vs.110%29.aspx

1 个答案:

答案 0 :(得分:4)

您缺少可以执行此操作的扩展方法。您只需在程序之上添加正确的using即可。我想这个示例并没有显示必要的usings

您正在寻找的方法是:public static ComposablePart SatisfyImportsOnce(this ICompositionService compositionService, object attributedPart);

在您的程序中添加using System.ComponentModel.Composition,扩展方法应该可以正常工作。

或者,也可以像这样调用extensionmethod:

AttributedModelServices.SatisfyImportsOnce(_container, myProgram);

请注意,它位于.NET framework&gt; = 4.0。