我正在使用嵌套容器来提供对上下文项的访问,如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集合到达自定义解析器中的嵌套容器。不过,这对我来说似乎是一种不受欢迎的方法。
答案 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的框架,否则我找不到一个很好的方法。