我需要将一些参数传递给自定义AbstractLifestyleManager派生类型。
当我从容器请求一个类型的实例时,使用以下重载:
T Resolve<T>(string key, object argumentsAsAnonymousType)
例如:
public IHttpController CreateController(HttpControllerContext controllerContext, string controllerName)
{
var controller = this.container.Resolve<IHttpController>(
controllerName,
new { requestProperties = controllerContext.Request.Properties });
// ...
}
然后,在自定义AbstractLifestyleManager派生类型内部,我可以这样做:
var messageProperties = (IDictionary<string, object>)
context.AdditionalArguments["requestProperties"];
它返回我预先传递的值。
但是,如果我调用
base.Resolve(context, releasePolicy)
,则如果代码以递归方式输入自定义类型,则AdditionalArguments为null。是否可以在
base.Resolve
调用之间传递/传递AdditionalArguments? 最佳答案
我不太确定实施生活方式管理器时的流程如何,但这听起来像是默认情况下CreateContext AdditionalArguments不会传播到子上下文的问题。请参见this other question。
在这种情况下,您可以尝试通过将DefaultDependencyResolver子类化来更改所链接问题中所述的默认值。