我需要将一些参数传递给自定义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子类化来更改所链接问题中所述的默认值。

08-25 06:19