无法解决循环依赖问题
cannot resolve circular dependency issue
我在从 ClassB 访问 classA 方法时遇到了循环依赖问题。
我的解决方案之前有以下参考资料。
classA 方法调用 -> class B 方法,这可以将库 B 引用到库 A。
但后来我需要从 ClassB 调用 classA 方法,但后来我无法添加引用,因为它造成了循环依赖问题。
所以我尝试添加一个接口来解决这个问题。
现在我想从 class B 调用 GetDataFromDB() 方法。
如何在 Class B 中创建 _classAObj。我是否需要从主要方法所在的索引 class 转移。
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();
}
}
}
只需使用 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)
构造函数。
我在从 ClassB 访问 classA 方法时遇到了循环依赖问题。 我的解决方案之前有以下参考资料。 classA 方法调用 -> class B 方法,这可以将库 B 引用到库 A。 但后来我需要从 ClassB 调用 classA 方法,但后来我无法添加引用,因为它造成了循环依赖问题。
所以我尝试添加一个接口来解决这个问题。
现在我想从 class B 调用 GetDataFromDB() 方法。
如何在 Class B 中创建 _classAObj。我是否需要从主要方法所在的索引 class 转移。
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();
}
}
}
只需使用 this
.
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)
构造函数。