比如说酒店软件,两个模块fo.dll和pos.dll(都有Form1,Form2...等主窗体,反射调用,必须有,主要是列表;其它是子窗体,如下面的前台客人帐和餐厅结帐)pos挂前台客人帐时(pos.jz)需要调用fo.Form1取客人列表来决定挂到哪个客人帐中(fo.bill)
所以pos.dll引用fo.dllpos挂完帐后(在数据库中插入一条记录),财务需要在fo.bill窗体中查看pos这笔帐的明细(具体吃的什么菜)
所以fo.dll又要引用pos.dll这就导致了循环引用,肯定是不行的,请问应该怎么样解决?!
所以pos.dll引用fo.dllpos挂完帐后(在数据库中插入一条记录),财务需要在fo.bill窗体中查看pos这笔帐的明细(具体吃的什么菜)
所以fo.dll又要引用pos.dll这就导致了循环引用,肯定是不行的,请问应该怎么样解决?!
类实现继承操作
其他业务操作引用公共的DLL
fo.Form1里是Tab,每页里是一个Grid,pos中要引用的就是这些Grid
fo.bill中要引用的也是pos.bill中的Grid
我现在只想到了将fo.Form1的源文件复制到pos文件夹中,但这样又会造成没必要的重复,而且容易搞错(可能会忘了同步)!
要不,你把这些Grid放在一个DLL当中怎样?
将来说不定哪个还要扩展,如果合并的话只能将pos的主窗体改为Form51,Form52...
唉,郁闷!~
fo.dll引用ipos.dll,然后实现反射创建,那样就不需要直接引用pos.dll了。
例子:
namespace ipos
{
interface iClass1
{
void Method1();
}
}using iPos;
namespace pos
{
public class Class1:iClass1
{
public void Method()
{.....}
}
}using iPos;
namespace fo
{
public class Class2
{
public iClass1 class1;
public Class2()
{
class1=Assembly.Load("Pos").CreateInstance("Pos.Class1");
}
.................
}
}
先学习依赖注入,反射创建的原则你就能立即明白。
但此用法一般只用于Factory、Repository等底层开发,并非随处适用,滥用会导致增大系统负荷,阁下可以按需要酌情处理。
希望大家可以踊跃参加,积极讨论