0

我目前正在进入我正在开发的项目的测试阶段,并且在除了最基本的默认测试用例之外的其他任何测试用例中都无法使主服务处于测试阶段。.Net重构应用程序使用依赖注入

该服务目前负责创建所有子组件,我希望将其更改为使用IoC容器。

我应该使用什么容器来快速重构为一个简单的IoC设置中,所有我需要的是在注入下面的构造lsited的成品的配件:

public DataService(string applicationFolder, string pluginFolder, 
     string persistantCacheDirectory, string settingsFolder, 
     string colorsFolder, string templatesFolder) 
{ 

    _DataSourceLoaderPlugins = new DataSourceLoaderPlugins(pluginFolder, 
            applicationFolder, defaultConnectionString); 
    _DataSourcesService = new DataSourceService(_DataSourceLoaderPlugins); 

    _ChartPlugins = new ChartPlugins(pluginFolder); 
    //... and about 10 more dependencies 

} 

我新的IoC容器,和我不太清楚我基本需求的最佳框架是什么。

组件构造函数确实需要web.config中的应用程序设置中的一些参数,这些参数对于此项目来说会很复杂。

该服务还需要具有单例作用域。

有什么建议?什么框架很简单,易于设置和进行?

回答

1

Autofac将是一个很好的选择 - 它是轻量级,非常容易起床和运行。

你会注册您的结构是这样的:

var builder = new ContainerBuilder(); 

// Use the most resolvable constructor 
builder.Register<DataSourceLoaderPlugins>().As<IDataSourceLoaderPlugins>().SingletonScoped(); 

// Use your own instance 
builder.Register(new DataSourcesService("some path")).As<IDataSourcesService>().SingletonScoped(); 

// Reference another component 
builder.Register(c => new ChartPlugins(c.Resolve<IDataSourcesService>(), "another path")).As<IChartPlugins>().SingletonScoped(); 

// ...other ~10 dependencies... 

builder.Register<DataService>().SingletonScoped(); 

// How to resolve an instance 

var container = builder.Build(); 

DataService dataService = container.Resolve<DataService>(); 

(有XML配置支持,如果你喜欢)

0

来自微软的Unity框架很好!不难用!

+0

不,这是不好的,如果你说这不是难用,你没有使用任何其他的。 – 2009-12-16 07:50:07

1

我是StructureMap的忠实粉丝 - 我没有发现花费了大量的精力来加快使用它,并且社区非常活跃,创建者Jeremy Miller特别有用。 StructureMap当然可以做你需要的东西,并且它在“标准”使用模式中都是可以实现的 - 基本的教程应该让你能够做你想做的一切。

StructureMap网站是一个非常好的开始,有很多教程和代码示例。

不过我成像,大部分的主流IoC容器会满足您的需求,它真的可以归结为个人喜好,像:

  1. 什么人,你知道用? (对我来说Ninject,StructureMap和Unity)
  2. 你赞赏什么开源项目,他们使用什么? (对我来说,Alt.Net似乎青睐StructureMap)
  3. 你是一个严格的微软商店吗? (然后Unity是要走的路 - 我会更多地使用它,因为我的客户的一些微软公司只有一些公司)

如果你想要概述什么是在那里帮助你放开你的想法,有一个伟大的博客文章here,看看所有的主要选项。

1

这里有国际奥委会librtaries的比较:

http://elegantcode.com/2009/01/07/ioc-libraries-compared/

我会去了解一下框架,允许你同时使用配置文件和编程方式来配置你的应用程序 - 以帮助单元测试。

+0

是不是这个比较过时了?现在ninject似乎有所不同,它支持属性,也许它比StructureMap更实用 – 2009-12-19 16:32:56