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

How resolve constructor params if create instance in runtime?

我有 azure 工作角色,我有类型列表,我在运行时创建它。 我需要使用 IoC(结构图)来初始化构造函数参数。 现在我有了这个 class:

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;

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

我想要构造函数中的参数:

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

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

如果您知道要使用 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 可能已经过时了,但一般概念应该保持不变。