编程语言
首页 > 编程语言> > c# – 循环依赖和动态程序集加载

c# – 循环依赖和动态程序集加载

作者:互联网

这是在AssemblyA中

namespace AssemblyA
{
    public class ClassA
    {
        public static void Main(string[] args)
        {
            ClassB b = new ClassB();
            Console.WriteLine(b.MultiplyTheSumByFactor(2, 3, 4));
            Console.ReadKey();
        }

        public int Multiply(int left, int right)
        {
            return left * right;
        }
    }
}

这是在AssemblyB中

namespace AssemblyB
{
    public class ClassB
    {
        public int Sum(int left, int right)
        {
            return left + right;
        }

        public int MultiplyTheSumByFactor(int left, int right, int factor)
        {
            // ClassA a = new ClassA(); // can't reference AssemblyA
            int sum = Sum(left, right);
            Type type = Assembly.GetCallingAssembly().GetTypes().First();
            object a = Activator.CreateInstance(type);
            return (int)type.GetMethod("Multiply").Invoke(a, new object[] { sum, factor });
        }
    }
}

AssemblyA是一个引用AssemblyB的控制台应用程序.

为什么我不能从AssemblyB引用AssemblyA,尽管我可以加载AssemblyA
反思并仍然称它为方法?

显然,实际上没有理由想要这样做,我只是好奇编译器/ CLR是如何工作的,以便通过反射来实现.

解决方法:

因为编译程序集需要链接到它的依赖项.如果A的依赖关系尚未编译(因为它们引用了A),你最终会遇到鸡和蛋的问题.

标签:c,assemblies,dll,circular-dependency
来源: https://codeday.me/bug/20190621/1251893.html