2012-05-12 43 views
4

我需要将一些参数传递给自定义AbstractLifestyleManager派生类型。在Castle Windsor上携带CreationContext.AdditionalArguments

当我请求类型的实例从容器,我使用下面的过载:

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?

回答

1

我不太清楚在实施生活方式管理器时流程是如何的,但听起来像CreateContext AdditionalArguments不按照默认传播到子上下文的问题。见this other question

如果是这种情况,您可以尝试通过继承DefaultDependencyResolver子类来更改链接问题中描述的默认值。