1
我正在嘗試構建一個應用程序,該應用程序使用託管實體框架來導入未知數量的類及其相關方法。從MEF進口構建類和方法heirachy
例如我有以下2類:
interface IClass { }
[Export(typeof(IClass))]
class Class1 : IClass
{
[Export(typeof(Func<int>))]
public int GetNumber()
{
return 1;
}
}
[Export(typeof(IClass))]
class Class2 : IClass
{
[Export(typeof(Func<int>))]
public int GetNumber1()
{
return 1;
}
[Export(typeof(Func<int>))]
public int GetNumber2()
{
return 2;
}
}
Class1
具有單個GetNumber
方法,同時Class2
有兩個。
在我的程序中,我能夠創建加載類和方法的導入。
class Program
{
[ImportMany]
IEnumerable<IClass> Classes { get; set; }
[ImportMany(typeof(Func<int>))]
IEnumerable<Func<int>> Methods { get; set; }
static void Main(string[] args)
{
Program p = new Program();
p.Run();
Console.Read();
}
void Run()
{
AssemblyCatalog catalog = new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly());
CompositionContainer container = new CompositionContainer(catalog);
container.ComposeParts(this);
if(this.Classes.Count() != 2)
{
throw new InvalidOperationException();
}
this.Methods.ToList().ForEach(m => Console.WriteLine(m()));
}
}
輸出
我的問題是類和方法之間的鏈路已丟失。由於所有的類和方法都被扔進相同的IEnumerable
,我不知道哪個類被鏈接到哪個方法。
我真的很想建立一個內存結構類似的模型的層次結構和方法,例如,
的Class1:GetNumber
類2:GetNumber1,GetNumber2
如何導入這些相同的類和方法,但保留類方法的鏈接?