Как получить доступ к вложенному контейнеру в пользовательском распознавателе? - PullRequest
0 голосов
/ 19 февраля 2011

Я использую вложенный контейнер для предоставления доступа к контекстным элементам, как указано здесь .

В Application_Start я создаю свои карты в похожей усадьбе:

Mapper.CreateMap<MyObject, MyMappedObject>()
    .ForMember(dest => dest.Url, opt => opt.ResolveUsing<MyResolver>());


public class MyResolver<MyObject, string> {
  protected override string ResolveCore(MyObject source) {
    var urlHelper = ObjectFactory.Container.GetNestedContainer().GetInstance<UrlHelper>();
    return urlHelper.GetMyUrl(source);
  }
}

К сожалению, он получает доступ только к контейнеру, а не к вложенному контейнеру. Можно ли получить доступ к контекстным элементам в пользовательском распознавателе? Если так, есть ли хороший способ сделать это с StructureMap?

В качестве примечания я могу получить доступ к вложенному контейнеру в пользовательском преобразователе с помощью коллекции HttpContext.Current.Items. Это кажется мне нежелательным методом.

1 Ответ

0 голосов
/ 22 февраля 2011

Я всегда просто помещал обертку вокруг элемента, который был вставлен в HttpContext.Items.

public static class Current
{
  public static IContainer Container
 {     //Throw exception if the item isn't there 
   return (IContainer)HttpContext.Items[yourKey];   
 }
}

Не очень красиво, но если вы не используете каркас, который действительно охватывает МОК, у меня нетЯ нашел хороший способ сделать это.

...