如何告诉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。