无法解决循环依赖问题

时间:2015-07-18 16:20:04

标签: c# circular-dependency circular-reference

当我从ClassB访问classA方法时,我遇到了循环依赖问题。 我之前有过关于我的解决方案的参考资料 classA方法调用 - > B类方法,将库B引用到库A就可以了。 但后来我需要从ClassB调用classA方法,但后来我不能添加引用,因为它正在产生循环依赖问题。

所以我试图添加一个界面来解决问题。

现在我想从B类调用GetDataFromDB()方法。

如何在B类中创建_classAObj。我是否需要从main方法所在的索引类进行传输。

enter image description here

using ClassLibraryC;

namespace ClassLibraryB
{
    public class ClassB 
    {
        IClassA _classAObj = null;

        public ClassB()
        { }

        public ClassB(IClassA objc)
        {
            _classAObj = objc;
        }

        public string GetDataFromDB(string cdata)
        {
            // connect db and get data
            // using data reader
              while(rdr.read())
             {
                // need to call StartProcess() method of classA
                _classAObj.StartProcess("data");
             }
            return  "client data:name : xyz: age:23";
        }
    }
using ClassLibraryB;
using ClassLibraryC;

namespace ClassLibraryA
{
    public class ClassA : IClassA
    {

        public ClassA() {}

        public void  GetClientData()
        {
            ClassB b = new ClassB();
            string result=  b.GetDataFromDB("c1");
        }

        public void StartProcess(string d)
        {
            string data = d; 
        }
    }
}
using ClassLibraryA;

namespace ClassLibraryC
{
   public interface IClassA
    {
        void StartProcess(string d);
    }
}
namespace Start
{
    class Index
    {
        static void Main(string[] args)
        {
            ClassA a = new ClassA();
            a.GetClientData();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

只需使用this将ClassA实例传递给ClassB。

public class ClassA : IClassA
{
    public ClassA() {}

    public void  GetClientData()
    {
        ClassB b = new ClassB(this);
        string result=  b.GetDataFromDB("c1");
    }

    public void StartProcess(string d)
    {
        string data = d; 
    }
}

你可以摆脱ClassB()构造函数,不再需要它,你只需要public ClassB(IClassA objc)构造函数。