我想不出这个问题的正确标题。但这是我的困境:
我有一个超过5个项目的解决方案。我关注其中的3个项目,让他们称之为项目 A ,项目 B 和项目 C 。项目 A在B 中引用, B在C 中引用。 (即,B指的是A,C指的是B)
我需要调用项目C中的一个函数,该函数属于A中的一个类。
我的问题是我不能在C中引用项目A,因为它会破坏构建。我试图创建一个属于B的类的对象,并通过该对象调用该函数。但这引发了一个错误,需要引用A。
有没有办法在不包含引用的情况下调用该函数?
我的一位同事建议在B中创建一个包装类,它将A中的函数作为一种变通方法来调用。但我怀疑它会有所帮助,因为在C中创建包装类的对象会再次引发对A的引用要求。
答案 0 :(得分:0)
作为一种解决方法,您可以通过反思来实现:
Assembly asm = Assembly.LoadFile(@"pathToDllHere\ProjectA.dll");
Type t = asm.GetType("ProjectA.ClassName");
MethodInfo methodInfo = t.GetMethod("MyMethod", new Type[] { typeof(string), typeof(int) });
Object o = Activator.CreateInstance(t);
object[] parameters = new object[2]
{
"sample parameter", 1337
};
var result = methodInfo.Invoke(o, parameters);
Console.WriteLine(result);
ProjectA.ClassName的位置如下:
public class ClassName
{
public string MyMethod(string a, int b)
{
return "called from A";
}
}