如果在运行时创建实例,如何解析构造函数参数?
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 可能已经过时了,但一般概念应该保持不变。
我有 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 可能已经过时了,但一般概念应该保持不变。