Simple Injector注册Automapper

4

我希望将Automapper注册到Simple Injector,以便将其注入到控制器中:

public class MyController : BaseController
{
    private IUnitOfWork unitOfWork;
    private IMappingEngine mappingEngine;

    public PatientController(IUnitOfWork _unitOfWork, IMappingEngine _mappingEngine)
    {
        this.unitOfWork = _unitOfWork;
        this.mappingEngine = _mappingEngine;
    }
}

然而,当我尝试注册它时。
public static void Initialize()
{
    //Code for registering our repository class and DI
    var container = new Container();
    container.Register<IUnitOfWork, UnitOfWork>();

    container.Register<IMappingEngine, MappingEngine>();

    container.RegisterMvcControllers(Assembly.GetExecutingAssembly());
    DependencyResolver.SetResolver(
        new SimpleInjectorDependencyResolver(container));
}

我遇到了一个错误:

容器需要确切地包含一个公共构造函数,才能创建MappingEngine,但它有2个。

参数名称:TImplementation。

我做错了什么?


1
你有检查过MappingEngine的构造函数并查看注入到MappingEngine中的类型是否已注册吗?同时尝试以下链接:https://lostechies.com/jimmybogard/2009/05/12/automapper-and-ioc/ - Spock
1
还要阅读此链接 https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=97 以了解为什么Simple Injector强制使用一个构造函数以及如何处理框架类型作为异常。 - Steven
1个回答

4
Simple Injector 无法为您自动连接 MappingEngine 类型,也不应该这样做,因为这是一个框架类型,框架类型不应该被自动连接,您可以在这里阅读相关信息。
相反,请使用手动连接,如下所示:
var container = new Container();

container.RegisterSingle<IMappingEngine>(Mapper.Engine);

谢谢,这正是我所需要的,完美地运作了,你救了我的命,非常感谢。 - dtjmsy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接