2013-01-07 48 views
3

我是新来的依赖注入,使用C#,所以请原谅我的跛脚问题。无论如何,在投入时间和购买昂贵的书籍之前,我想提出这个问题。依赖注入有多有用?

通过一些在线文档会后,似乎使用依赖容器与配置文件一起可以使用这个从到另一个类型的实现来SWITH。但是,这可以通过if/else语句和一些配置设置轻松完成。

什么是使用这种繁琐的实现只是从一个类更改为另一个优势?我看到抽象和工厂模式更有用。也许我错了。

回答

1

地方,我需要依赖注入我哈SA真正WORL情况:

2装配:1负责计算价格,当你做一个搜索(让叫它搜索),第二负责计算预订价格与所有选项(我们称之为预订)。

预订集已引用搜索(因为它需要知道最初的价格计算全价)。

但是这里的要求是:我们需要搜索的价格来包含所有的授权选项(是的,在旅游行业你有授权选项),比如“全房清洁”。

,所以我不能有一个裁判的预订中搜索(因为循环引用)。所以我决定使用依赖注入。

我的搜索组件定义的接口

public interface IAddMandatoryOptionService{ 
    void ChangeResultsWithMandatoryOptions(SearchResult[] results); 
} 

然后我的预订大会可以实现此接口。

public class AddMandatoryOptionService : IAddMandatoryOptionService{ 
    public void ChangeResultsWithMandatoryOptions(SearchResult[] results){ 
    ... 
    } 
} 

我SearchService类现在看起来像

public class SearchService{ 
    public SearchService(IAddMandatoryOptionService optionService){ 
    this.OptionService = optionService; 
    } 
    public SearchResult[] Search(Filter filter){ 
    ... 
    this.OptionService.ChangeResultsWithMandatoryOptions(results); 
    ... 
    return results; 
    } 
} 

所以我的搜索服务没有依赖于AddMandatoryOptionService类(和预订组装),但它使用的functionality.The好IAddMandatoryOptionService会注射时创建我的服务(在我的Application_Start或与DI框架)

的优点是:

  • 解决循环引用问题。
  • 如果我想对我的SearchService进行单元测试,那么我将不得不模拟/伪造IAddMandatoryOptionService。

在这里,注射需要更多的技术比逻辑,但我认为这种现实世界的情况可以帮助你明白这一点。

1

总之,依赖注入用于能够losely耦合类。通过使用if else语句,您可以在类之间引入依赖关系。在将新实现添加到if语句时,您需要添加另一个else语句。

你可能已经阅读http://en.m.wikipedia.org/wiki/Dependency_injection,因为他们有一个不错的动力部分。

也许用不同的代码示例来完成你的q。