为通用接口和类对指定默认的 Unity 类型映射

发布于 2024-08-20 23:13:31 字数 1085 浏览 7 评论 0原文

我们使用基于构造函数的依赖注入,AutoMapperAutoMapper 。 codeplex.com/unity" rel="nofollow noreferrer">代码库上的 Unity。

我们用通用接口包装了 AutoMapper...

public interface IMapper<TSource, TDestination>
{
    TDestination Map(TSource source);
}

以及实现该接口的类...

public class AutomaticMapper<TSource, TDestination> : IMapper<TSource, TDestination>
{
    public TDestination Map(TSource source)
    {
        return AutoMapper.Mapper.Map<TSource, TDestination>(source);
    }
}

这效果很好,但这意味着对于我们在 AutoMapper 配置中定义的每个映射,我们需要执行额外的 UnityContainer.RegisterType 。

这些类型映射几乎总是采用以下形式:

container.RegisterType<IMapper<ClassA, ClassB>, AutomaticMapper<ClassA, ClassB>>();

有什么方法可以告诉 Unity 使用默认类型映射,使用相同的 IMapper 映射到 AutomaticMapper它们各自的 TSourceTDestination

We're using constructor-based dependency injection, AutoMapper and Unity on a codebase.

We have wrapped AutoMapper with a generic interface...

public interface IMapper<TSource, TDestination>
{
    TDestination Map(TSource source);
}

And a class that implements this interface...

public class AutomaticMapper<TSource, TDestination> : IMapper<TSource, TDestination>
{
    public TDestination Map(TSource source)
    {
        return AutoMapper.Mapper.Map<TSource, TDestination>(source);
    }
}

This works well, but it means that for every mapping we define in the AutoMapper configuration we need to perform an additional UnityContainer.RegisterType.

These type mappings are almost always of the form

container.RegisterType<IMapper<ClassA, ClassB>, AutomaticMapper<ClassA, ClassB>>();

Is there any way that we can tell unity to use a default type mapping that maps from IMapper to AutomaticMapper using the same TSource and TDestination for each of them?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

坐在坟头思考人生 2024-08-27 23:13:31

我们实际上做了几乎完全相同的事情。在Unity中,你可以说:

unityContainer.RegisterType(typeof(IMapper<,>), typeof(AutomaticMapper<,>));

We actually do almost the same exact thing. In Unity, you can say:

unityContainer.RegisterType(typeof(IMapper<,>), typeof(AutomaticMapper<,>));
当梦初醒 2024-08-27 23:13:31

Unity 有一个自动注册插件,可能可以满足您的需求。查看 http://unity.codeplex.com/Thread/View。 aspx?ThreadId=59418

There's an auto registration add-in for Unity that probably does what you want. Have a look at http://unity.codeplex.com/Thread/View.aspx?ThreadId=59418

非要怀念 2024-08-27 23:13:31
public class AutomaticMapper : IMapper
{
    public TDestination Map<TSource, TDestination>(TSource source)
    {
        return AutoMapper.Mapper.Map<TSource, TDestination>(source);
    }
}
public class AutomaticMapper : IMapper
{
    public TDestination Map<TSource, TDestination>(TSource source)
    {
        return AutoMapper.Mapper.Map<TSource, TDestination>(source);
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文