c# - 将依赖注入(inject)与具有构造函数参数的 AutoMapper ValueResolver 结合使用

标签 c# dependency-injection automapper

我有以下自定义值解析器:

public class ImageUrlResolver<T> : ValueResolver<T, string>
{
    private readonly ISettings _settings;

    public ImageUrlResolver(string size)
    {
        _settings = ObjectFactory.GetInstance<ISettings>();
    }

    ...
}

.ForMember(d => d.ImageUrl, 
    o => o.ResolveUsing<ImageUrlResolver>().ConstructedBy(() => new ImageUrlResolver("150x150"))

我正在尝试更新它,以便我可以注入(inject) StructureMap 的 IContainer 而不是使用 ObjectFactory,但我不确定如何构建解析器有构造函数参数。还有什么我可以做的吗?

最佳答案

我想出了一个解决方案。我现在将 IContainer 注入(inject)配置文件,并将其传递给解析器。

public static void Initialise(IContainer container)
{
    var type = typeof(Profile);
    var profiles = AppDomain.CurrentDomain
                            .GetAssemblies()
                            .SelectMany(a => a.GetTypes())
                            .Where(t => type.IsAssignableFrom(t) && type != t)
                            .Select(container.GetInstance)
                            .Cast<Profile>()
                            .ToList();

    Mapper.Initialize(c =>
        {
            profiles.ForEach(c.AddProfile);
            c.ConstructServicesUsing(container.GetInstance);
        });
}

public class MyProfile : Profile
{
    private readonly IContainer _container;

    public MyProfile(IContainer container)
    {
        _container = container;
    }

    private static void Configure()
    {
        Mapper.CreateMap<Entity, Model>()
            .ForMember(d => d.ImageUrl, o => o.ResolveUsing<ImageUrlResolver>().ConstructedBy(() => new ImageUrlResolver(_container, "150x150"))
    }
}

也许不是最干净的解决方案,但它是我发现的唯一可行的解​​决方案。

关于c# - 将依赖注入(inject)与具有构造函数参数的 AutoMapper ValueResolver 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32520107/

相关文章:

c# - 使用 Console.CursorLeft 进行控制台重定向

c# - Keydown 事件触发两次

c# - .Net MVC4 重定向到操作未按预期工作

c# - 有没有办法使用 IoC 容器向辅助类注入(inject)依赖项?

jakarta-ee - WELD-001408 在注入(inject)点带有限定符 [@Named] 的类型 [LdapService] 的依赖关系不满足

dependency-injection - 使用 RavenDB 设置 dotnet 核心

c# - 使用 AutoMapper 添加、更新和删除列表中的项目

c# - PInvoke 调用外部 SetWindowsHookEx 和 GetModuleHandle 时出错

nhibernate - 如何使用 AutoMapper 简单地将 NHibernate ISet 映射到 IList

memory-leaks - 为什么 Automapper 使用这么多内存?