首页 > 解决方案 > Automapper 10 和 Simple Injector v5 设置“SimpleInjector.ActivationException”

问题描述

我在下面的 AutoMapper 设置文章中遵循此设置,但我不断收到此错误。文档不正确吗?

private static IMapper GetMapper(Container container)
{
    var mp = container.GetInstance<MapperProvider>();
    return mp.GetMapper();
}

public static void Register(Container container)
{
    container.RegisterSingleton(() => GetMapper(container));
    ...

MapperProvider.cs

public class MapperProvider
{
    private readonly Container _container;

    public MapperProvider(Container container)
    {
        _container = container;
    }

    public IMapper GetMapper()
    {
        var config = new MapperConfigurationExpression();
        config.ConstructServicesUsing(_container.GetInstance);
        config.AllowNullDestinationValues = true;
        config.AllowNullCollections = true;

        config.CreateMap<TeamModel, PoolTeamExtendedModel>();
        var mc = new MapperConfiguration(config);
        mc.AssertConfigurationIsValid();

        IMapper m = new Mapper(mc, t => _container.GetInstance(t));

        return m;
    }

错误

SimpleInjector.ActivationException:'找不到类型 MapperProvider 的注册。确保 MapperProvider 已注册,例如通过调用 'Container.Register<MapperProvider>();' 在注册阶段。无法进行隐式注册,因为 Container.Options.ResolveUnregisteredConcreteTypes 设置为“false”,现在这是 v5 中的默认设置。这不允许容器构造这个未注册的具体类型。有关为什么默认情况下现在不允许解析未注册的具体类型的更多信息,以及您可以应用哪些可能的修复,请参阅https://simpleinjector.org/ructd。'

标签: .netasp.net-mvcdependency-injectionautomappersimple-injector

解决方案


我首先添加了这种具体类型

container.RegisterSingleton<MapperProvider>();

推荐阅读