パラメータが異なるカタログに同じモジュールを 2 回追加する方法を知っていますか?
ITest acc1 = new smalltest("a", 0)
ITest acc2 = new smalltest("b", 1)
AggregateCatalog.Catalogs.Add(??)
AggregateCatalog.Catalogs.Add(??)
前もって感謝します!
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 です。