结构图-构造函数中的依赖项集合 [英] Structure Map - Collection of Dependencies in Constructor
问题描述
我的注册表中有以下代码:
I have the following code in my Registry:
Scan(x =>
{
x.Assembly(Assembly.GetExecutingAssembly());
x.AddAllTypesOf<IXmlExtractor>();
});
此代码将 IXmlExtractor
的所有实例添加到我的程序集到IoC容器。
This code adds all instances of IXmlExtractor
in my assembly to the IoC container.
现在,我想使用类中所有找到的实例,但是我更喜欢通过构造函数注入而不是使用方法中的ObjectFactory
。希望下面的代码说明我想做什么:
Now I want to use all found instances in my class, but I prefer to inject via constructor than to use ObjectFactory
in a method. Hopefully code below illustrates what I want to do:
class Engine : IEngine
{
private readonly ILog _logger;
private readonly ICurveConfigRepository _configRepo;
private readonly IDataExtractor _dataExtractor;
public Engine(ILog logger,
ICurveConfigRepository configRepo,
IDataExtractor dataExtractor
/* SomeCollectionOfIXmlExtractors allExtractors */)
{
_logger = logger;
_configRepo = configRepo;
_dataExtractor = dataExtractor;
}
public void Run(string mode)
{
_logger.Info(string.Format("About to run retrieve config for '{0}' mode.", mode));
var config = _configRepo.LoadConfig(mode);
_logger.Info("Config retrieved, extracting data");
var data = _dataExtractor.GetCurves(config);
_logger.Info("Data extracted");
// Foreach IXmlExtractor instance, call .DoStuff(data) with it.
// I don't like using ObjectFactory here - see comment in constructor
var extractors = ObjectFactory.GetAllInstances<IXmlExtractor>();
}
}
希望这很清楚,请发表评论
Hopefully this is clear, please comment back if further explanation is required.
- C#:4.0
- StructureMap:2.5.4.0
- C#: 4.0
- StructureMap: 2.5.4.0
谢谢
Graeme
推荐答案
您已经在容器中正确注册了所有实例。
You have already correctly registered all instances with the container.
Scan(x =>
{
x.Assembly(Assembly.GetExecutingAssembly());
x.AddAllTypesOf<IXmlExtractor>();
});
您需要做的就是声明一个数组变量和 StructureMap
将自动处理构造函数注入。
All you need to do is declare an array variable and StructureMap
will take care of the constructor injection automatically.
class Engine : IEngine
{
private readonly ILog _logger;
private readonly ICurveConfigRepository _configRepo;
private readonly IDataExtractor _dataExtractor;
private readonly IXmlExtractors[] _allExtractors;
public Engine(ILog logger,
ICurveConfigRepository configRepo,
IDataExtractor dataExtractor
IXmlExtractors[] allExtractors)
{
_logger = logger;
_configRepo = configRepo;
_dataExtractor = dataExtractor;
_allExtractors = allExtractors;
}
public void Run(string mode)
{
_logger.Info(string.Format("About to run retrieve config for '{0}' mode.", mode));
var config = _configRepo.LoadConfig(mode);
_logger.Info("Config retrieved, extracting data");
var data = _dataExtractor.GetCurves(config);
_logger.Info("Data extracted");
// Use extractors...
foreach (var extractor in _allExtractors)
{
extractor.DoStuff(data);
}
}
}
这篇关于结构图-构造函数中的依赖项集合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!