2017-02-19 11 views
0

구조 문제를 만들지 않고 서비스를 생성하기 위해 구조 맵을 사용하도록 AutoMapper 5에 알려주는 방법 (예 : new MapperConfiguration(cfg => cfg.ConstructServicesUsing(some_IContainer)))은 StructureMap을 통해 구성 할 때?부트 스트랩 AutoMapper 및 StructMap을 통해 ConstructServicesUsing

사용자 지정 해결 프로그램에는 AutoMapper에서 사용할 서비스 찾기가 필요하지만, 은 아직 없으며 AutoMapper가 StructureMap 레지스트리에서 초기화되는 동안. 정적 ObjectFactory.Container는 StructureMap에서 사용되지 않으며, 그래서 나는 게으른 ObjectFactory를 가지고 : 나는 스택 오버 플로우 또는 "게으른 공장 내부 참조 값"을 얻을 수 있기 때문에

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)을 붙잡는 방법이 있습니까?

답변

0

lamdba-based registrations을 사용하여 컨테이너가 아직 구축되지 않은 경우에도이를 활용할 수 있습니다.

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)); 
       }); 
      }); 
    } 
} 

당신은 닭이 먼저 냐 달걀이 먼저 냐의 문제를 방지이 방법 :

MapperConfiguration의 등록은 같은 것을 볼 수 있었다.

경고

이 코드를 테스트하지 않았습니다, 내가 StructureMap에 익숙하지 않다.