如何在自定义解析程序中访问嵌套容器?

时间:2011-02-19 16:42:05

标签: structuremap automapper

我正在使用嵌套容器来提供对上下文项的访问,如here所示。

在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 :(得分:0)

我总是在包含在HttpContext.Items中的项目周围放置一个包装器。

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

不是很漂亮,但除非你选择真正拥抱IOC的框架,否则我找不到一个很好的方法。