1

我正在使用 MEF。我的应用程序是开放式的,但我仍然想对扩展它的人隐藏它。

例如 BaseAssembly 有

public class ListContainer
{
    [ImportMany(typeof(IBase))]
    public List<IBase> MyObjects { get; set; }

    public void AssembleDriverComponents()
    {
         .... Some code to create catalogue..
         //Crete the composition container
            var container = new CompositionContainer(aggregateCatalog);

            // Composable parts are created here i.e. the Import and Export components assembles here
            container.ComposeParts(this);
    }
}

其他组件将参考基础组件。

ReferenceAssembly 将有

[Export(typeof(IBase))]
public class MyDerived
{
    public MyDerived()
    { }
}

我想避免引用程序集中派生类上的这个属性。

是否可以?

4

1 回答 1

2

我认为您正在寻找的是InheritedExport属性。你可以在你的IBase界面上使用它,它会自动导出任何实现IBase.

[InheritedExport(typeof(IBase))]
public interface IBase
{
    // ...
}

public class MyDerived : IBase
{
    // This class will be exported automatically, as if it had
    // [Export(typeof(IBase))] in its attributes.
}

您可以在此处阅读有关继承导出的更多信息。

于 2012-12-12T09:31:48.017 回答