1

我正在使用 Castle Windosr 容器。我希望能够在运行时指定一些构造函数依赖项,这显然可以通过使用带有字典的 Resolve 重载来完成,一切都很好。但是,如果我想为根的依赖项指定运行时依赖项,那么我迷路了,目前我已经通过显式创建每个项并将其嵌入来解决。本质上它是一个装饰器场景,我想获得一个实例decator,同时在运行时为正在装饰的对象提供依赖项。有任何想法吗?我宁愿不必做我在下面做的事情,也不想让 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;

        }
4

1 回答 1

2

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

于 2009-01-22T22:11:53.890 回答