通过例子学Ioc(2)

一 环境
Windows 2003
VS 2005
.net 2.0

二 例子描述
 这是一个简单的HelloWorl例子,工程总共分三个项目,一个控制台项目,二个类库项目
1)类库项目:HelloType

这里定义了两个类,ChineseHello 和 EnglishHello,分别输出中文的“你好”和英文的“Hello”,它们都是从接口IHello继承。
IHello:

    public   interface  IHello
    
{
        
void SayHello(String toName);
    }

ChineseHello :
using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  Ioc
{
    
public class ChineseHello : IHello
    
{
        
public void SayHello(string toName)
        
{
            Console.WriteLine(
"你好 " + toName);
        }

    }

}


EnglishHello :

using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  Ioc
{
    
public class EnglishHello : IHello
    
{
        
public void SayHello(string toName)
        
{
            Console.WriteLine(
"Hello "+ toName);
        }

    }

}


2)类库项目:GenerateHello
相当于一个工作类,需引用HelloType.dll
using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  Ioc
{
  
    
public class GenerateHello
    
{       
        
private IHello fHelloType;
        
public GenerateHello(string type)
        
{           
            
switch (type)
            
{
                
case "cn":
                    fHelloType 
= new ChineseHello();
                    
break;
                
default:
                    fHelloType 
= new EnglishHello();
                    
break;
            }

        }


        
public void Generate(string toName)
        
{
            fHelloType.SayHello(toName);
        }

    }

}

2)控件台项目:Ioc
通过type的值来New 不同的对象,从而产生不同的输出效果。

using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  Ioc
{
    
class Program
    
{
        
static void Main(string[] args)
        
{
            
string type = "cn";
            GenerateHello gen 
= new GenerateHello(type);   
           
            gen.Generate(
"Jinzhao");

            Console.Read();
        }

    }

}

 

这样的写法有几个问题:

1) 类之间的依赖。如果我的GenerateHello类发生了变化,控制台项目也需要重新编译。
2) 类的可扩展性。如果我要增加一种新的语言,必须改动几个地方,除了在HelloType
类中要增加一个新的类,比如FrenchHello以外,还要在GenerateHello类的Switch增加一个新的Case,以便能New这么一个对象。

上面几点,归纳起来,就是不够灵活。
那我们看下有没有其他的办法来解决这些问题。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值