0

パラメータが異なるカタログに同じモジュールを 2 回追加する方法を知っていますか?

ITest acc1 = new smalltest("a", 0)
ITest acc2 = new smalltest("b", 1)

AggregateCatalog.Catalogs.Add(??)
AggregateCatalog.Catalogs.Add(??)

前もって感謝します!

4

1 に答える 1

0

MEF は属性の使用に制限されており、IoC コンテナーによって通常提供される柔軟性とは異なり、インポートおよびエクスポート属性を使用して構成できるためPart、MEF で a を拡張する方法だけでなく、参照された DLL から拡張することもできます。[ExportAttribute]. _ 属性は、クラスでの使用に限定されませんが、プロパティに適用できます。例えばこんな感じでいかがでしょうか。

public class PartsToExport
{
    [Export(typeof(ITest))]
    public Implementation A
    {
        get { return new Implementation("A", 5); }
    }

    [Export(typeof(ITest))]
    public Implementation B
    {
        get { return new Implementation("B", 10); }
    }
}

public interface ITest
{
    void WhoAmI(Action<string, int> action);
}

[Export]
public class Implementation : ITest
{
    private string _method;
    private readonly int _value;

    public Implementation(string method, int value)
    {
        _method = method;
        _value = value;
    }

    public void WhoAmI(Action<string, int> action)
    {
        action(_method, _value);
    }
}

[TestClass]
public class Tests
{
    [TestMethod]
    public void Test()
    {
        var catalog = new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly());
        CompositionContainer container = new CompositionContainer(catalog);

        var tests = container.GetExportedValues<ITest>();

        foreach (var test in tests)
        {
            test.WhoAmI((s, i) => Console.WriteLine("I am {0} with a value of {1}.", s, i));
        }
    }
}

これにより、次がコンソールに出力されます。

私は値が 5 の A です。
私は値が 10 の B です。

于 2013-06-18T04:14:14.277 に答える