在学习抽象工厂的时候,碰见这样的一个问题:
我的设计如下
                                            |----》SQLFactroy
               |-----》AbstractFactory----》|----》MySqLFactoy
ui----》bll--》|                   |----》SQLProvider
               |-----》IDAL------》|----》MySqlProvider
bll层引用AbstractFactroy和IDAL
AbstractFactory是一个dll
IDAL是一个dll
SQLProvider是一个dll
MySqlProvider是一个dll
SQLFactory是一个dll
MySqlFactory是一个dll
在bll中,使用一个Manager.cs来管理反射,我的反射是反射SqlFactory和MySqlFactory
可是,反射没有问题,但是提示一个错误,提示SQLProvider.ll或者MySqlProvider有一个依赖项
一旦我把SQLProvider和MySqlProvider和SqlFactory,MySqlFactory放在同一个dll中,就没有问题。
那么是不是具体产品SQLProvider,MySqlProvider和具体工厂SQLFactory,MySqlFactory必须放在同一个dll里面呢?
请各位大侠赐教!

解决方案 »

  1.   

    需要反射生成对象的dll以及该类所赖的dll都要有一个拷贝放在网站的bin文件夹中,要不然反射找不到对象.
      

  2.   

    如果是这样的话,把SqlProvider和MySqlProvider放在web/bin下面的话,那么在ui里面就可以直接来访问
    SqlProvider和MySqlProvider了,这样不是不符合设计模式吗?
      

  3.   

    为什么要在UI里访问?
    数据访问层访问SqlProvider和MySqlProvider
    业务逻辑层调用数据访问层
      

  4.   

    那么是不是具体产品SQLProvider,MySqlProvider和具体工厂SQLFactory,MySqlFactory必须放在同一个dll里面呢?
    请告诉我是不是必须放在同一个dll里面?
      

  5.   

    话不能这样说,试想,如果你新增了某模块,只要把丢到bin里,再改下web.config就可以新增功能,不需要修改任何现存模块,这不就是设计模式追求的境界么.