如果在运行时创建实例,如何解析构造函数params?

时间:2016-02-01 04:15:05

标签: c# azure inversion-of-control ioc-container

我有天蓝色的工作角色,我有类型列表,我在运行时创建它。 我需要使用IoC(structuremap)来初始化构造函数params。 现在我有了这堂课:

public class BuildCompletedFormatter1
    {
        private readonly IBuildService _buildService;
        private readonly IProjectService _projectService;

        public BuildCompletedFormatter(IContainer container) : base(container)
        {
            _projectService = container.GetInstance<IProjectService>();
            _buildService = container.GetInstance<IBuildService>();
        }
}

我现在创建:

var type = instanse.GetType();
object instantiatedType = Activator.CreateInstance(type, container);
return instantiatedType;

但我需要使用零个或多个parama初始化构造函数。 我的格式化程序不需要了解IContaiiner

我想在构造函数中使用params:

public class BuildCompletedFormatter2
        {
            private readonly IBuildService _buildService;
            private readonly IProjectService _projectService;

            public BuildCompletedFormatter(IProjectService projectService, IBuildService buildService)
            {
                _projectService = projectService;
                _buildService = buildService;
            }
    }

1 个答案:

答案 0 :(得分:1)

如果您知道要使用StructureMap解析的类型,则应该能够轻松地创建它:

var container = new Container();
container.Configure(r => r.For<IProjectService>().Use<MyProjectService>());
container.Configure(r => r.For<IBuildService>().Use<MyBuildService>());

var fmt = container.GetInstance<BuildCompletedFormatter2>();

自从我上次查看StructureMap以来已经很长时间了,所以我对API的使用可能已经过时,但一般概念应该保持不变。