gpt4 book ai didi

dependency-injection - 如何使用 StructureMap 注入(inject) AutoMapper IMappingEngine

转载 作者:行者123 更新时间:2023-12-04 11:14:43 25 4
gpt4 key购买 nike

我为 Automapper 找到的大多数示例使用静态 Mapper 对象来管理类型映射。对于我的项目,我需要使用 StructureMap 将 IMapperEngine 作为对象构造的一部分注入(inject),以便我们可以在单元测试中模拟映射器,因此我们不能使用静态映射器。我还需要支持配置 AutoMapper Profiles。

我的问题是如何配置 StructureMap 注册表,以便在构造 MyService 实例时它可以提供 IMappingEngine 实例。

这是服务构造函数签名:

public MyService(IMappingEngine mapper, IMyRepository myRepository, ILogger logger)

这是 StructureMap 注册表

public class MyRegistry : StructureMap.Configuration.DSL.Registry
{
public MyRegistry()
{
For<IMyRepository>().Use<MyRepository>();
For<ILogger>().Use<Logger>();
//what to do for IMappingEngine?
}
}

以及我要加载的个人资料

public class MyAutoMapperProfile : AutoMapper.Profile
{
protected override void Configure()
{
this.CreateMap<MyModel, MyDTO>();
}
}

最佳答案

Mapper类有一个静态属性 Mapper.Engine .使用它向容器注册引擎:

For<IMappingEngine>().Use(() => Mapper.Engine);

如果您需要在注入(inject)引擎之前加载您的配置文件,我会在上面的代码片段旁边插入该配置代码。

更新

您的自定义注册表看起来像这样

class MyRegistry : Registry
{
public MyRegistry()
{
For<IMyRepository>().Use<MyRepository>();
For<ILogger>().Use<Logger>();

Mapper.AddProfile(new AutoMapperProfile());
For<IMappingEngine>().Use(() => Mapper.Engine);
}
}

此代码在您的 bootstrap 和任何类型的依赖项中运行一次 IMappingEngine之后将提供静态属性的值 Mapper.Engine这是使用您的自定义配置 AutoMapperProfile .

关于dependency-injection - 如何使用 StructureMap 注入(inject) AutoMapper IMappingEngine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12604896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com