且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

结构图-构造函数中的依赖项集合

更新时间:2023-02-25 20:14:42

您已经在容器中正确注册了所有实例。

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);
        }
    }
}