这样的设计下,对程序集的引用如何处理呢?目的是解藕。
有如下的设计:   
  <项目1> 中定义了接口IHandler   。 
  <项目2> 中定义了A_Handler类实现了接口IHandler   。 
  <项目3> 是最终的调用者。   
 将来类似 <项目2> 中A_Handler的类数量未知,但肯定的是都会实现IHandler   。在程序部署后不想为添加这样的类而重新编译整个程序,所以想把 <项目2> 单独编译为dll,将来新增这样的类就可以直接把新的dll复制的指定目录,修改配置便可。   
 由 <项目3> 的调用者通过反射来创建A_Handler的实例(可以在程序启动时根据配置文件创建所有类似A_Handler的实例)。   
 **现在有一个问题:在 <项目3> 的调用者中,string   url   =   ((A_Handler)aHandler).BuildURL   ();   这句代码中需要对声明为IHandler的实例aHandler做转型处理,即需要加上(A_Handler),这样还得在编译前为 <项目3> 添加A_Handler.dll为引用,与初衷不符,Program   类和A_Handler类不能彻底解耦。   
 **这种情况需如何解决,可以动态的通过编程添加引用吗?并使用 "A_Handler "字符串去做aHandler的转型吗?   
 演示代码:   
  <项目1>  
 namespace   XXX{   
             public   interface   IHandler   {   
                         string   Access   (string   url); 
             } 
 }   
  <项目2>  
 namespace   XXX{   
             public   class   A_Handler:IHandler{   
                         public   string   BuildURL(){   
                                  Console.WriteLine   ( "build...OK "); 
                         }   
                         public   string   Access   (string   url)   {                                       
                                     stirng   xml   =    "...xml   string... "; 
                                     Console.WriteLine( "access...OK "); 
                                     return   xml; 
                         } 
             } 
 }   
  <项目3>  
 namespace   XXX   {   
             class   Program   {   
                         static   void   Main   (string[]   args)   {   
                                     IHandler   aHandler   =   (IHandler)Assembly.LoadFile(@ "D:\TEST\DotNet\XXX\bin\Debug\A_Handler.dll ").CreateInstance( "XXX.A_Handler ");   
                                     string   url   =   ((A_Handler)aHandler).BuildURL   (); 
                                     string   xml   =   aHandler.Access   (url);   
                                     Console.WriteLine   (xml); 
                         } 
             } 
 }   
------解决方案--------------------你这种设计实现就是项目3对项目2的依赖 是你实现不合理造成的
------解决方案--------------------1、项目1和项目3完全可以合并 
 2、如果你需要使用A_Handle而不能使用IHandle,那么你的这个接口还有什么意义?把所需要的东西抽象到IHandle内……