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