Castle Windsor - 嵌套的运行时依赖项

时间:2009-01-07 12:24:38

标签: inversion-of-control castle-windsor

我正在使用Castle Windosr容器。我希望能够在运行时指定一些构造函数依赖项,显然您可以通过使用Resolve重载来获取字典,一切都很好。但是,如果我想为root的依赖项指定运行时依赖项,那么我就迷失了,目前我已经通过显式创建每个并将其置于其中来处理。本质上它是一个装饰器场景,我想得到一个实例decarator同时在运行时为装饰对象提供依赖关系。有任何想法吗?我宁愿不必做我在下面做的事情而且我宁愿不让decarator构造函数填充下面的对象,因为有时候依赖关系不一样。

   public static IActivity GetActivityFromIoC(string key, Message message, Audit audit)
        {

            IActivity activity = IoC.Resolve<IActivity>(key, new Dictionary<
                                                                              string, object>(){
                { "message", message }
                });

            IActivity auditingActivity = IoC.Resolve<IActivity>("auditing.activity", new Dictionary<
                                                                              string, object>(){
            { "activity", activity },     
            { "message", message },
            { "audit", audit }

                });

            return auditingActivity;

        }

1 个答案:

答案 0 :(得分:1)

你可能可以通过编写自己的ISubDependencyResolver实现来解决这个问题。 单独的容器不允许这样,并且很可能它永远不会。 为什么?简短的回答是 - 通过这样做,您可以对组件的依赖关系做出假设,这是一个禁忌,容器就是从调用者那里删除这种知识。