Bootstrapping AutoMapper & StructureMap via ConstructServicesUsing



如何告诉AutomApper 5使用structureMap构建服务而不创建引导问题,即new MapperConfiguration(cfg => cfg.ConstructServicesUsing(some_IContainer))通过结构图制作配置?

自定义解析器需要汽车应用程序使用的服务定位器,但是在structureMap注册表中初始化自动应用程序时,IContainer尚不存在。静态ObjectFactory.Container已在结构中弃用,所以我有一个懒惰的对象:

public static class ObjectFactory
{
    private static readonly Lazy<Container> _containerBuilder =
            new Lazy<Container>(defaultContainer, LazyThreadSafetyMode.ExecutionAndPublication);
    public static IContainer Container
    {
        get { return _containerBuilder.Value; }
    }
    private static Container defaultContainer()
    {
        return new Container(x =>
        {
            x.AddRegistry<MyRegistry>(); // AutoMapper is configured here
        });
    }
}

我无法从AutoMapper配置文件中引用ObjectFactory.Container,因为我得到了堆栈溢出或"懒惰工厂中的值"。

配置AutoMapper后,是否可以在.ConstructUsing(some_IContainer)上进行处理?

您可以通过使用基于LAMDBA的注册来利用容器(即使尚未构建)。

您的MapperConfiguration注册可能看起来像:

class MyRegistry : Registry
{
    public MyRegistry()
    {
        For<MapperConfiguration>()
            .Use("Use StructureMap context to resolve AutoMapper services", ctx =>
            {
                return new MapperConfiguration(config =>
                {
                    config.ConstructServicesUsing(type => ctx.GetInstance(type));
                });
            });
    }
}

这样,您就可以避免鸡肉和鸡蛋问题。

警告

我尚未测试此代码,我不熟悉structuremap。

相关内容

  • 没有找到相关文章

最新更新