Castle Windsor — Вложенные зависимости времени выполнения

Я использую контейнер Castle Windosr. Я хочу иметь возможность указать некоторые зависимости конструктора во время выполнения, что вы, очевидно, можете сделать, используя перегрузку Resolve, которая принимает словарь, все хорошо и прекрасно. Однако, если я хочу указать зависимость времени выполнения для зависимости от корня, тогда я потерялся, на данный момент я работал, явно создавая каждый и добавляя его. По сути, это сценарий декоратора, и я хочу получить экземпляр декаратор, обеспечивая при этом зависимость во время выполнения для декорируемого объекта. Любые идеи? Я бы предпочел не делать то, что я делаю ниже, и я бы предпочел, чтобы конструктор декаратора не заполнял объект под ним, поскольку будут времена, когда зависимости не совпадают.

   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;

        }

person Community    schedule 07.01.2009    source источник


Ответы (1)


Вероятно, вы могли бы справиться с этим, написав собственную реализацию ISubDependencyResolver, которая сделает это за вас. Сам по себе контейнер этого не позволяет и, скорее всего, никогда не позволит. Почему? Короткий ответ: делая это, вы делаете предположения о зависимостях вашего компонента, что является нет-нет, и контейнер предназначен для удаления такого рода знаний от вызывающей стороны.

person Krzysztof Kozmic    schedule 22.01.2009
comment
Я пометил это на работе, чтобы ответить дома, но вы меня опередили :) - person Mauricio Scheffer; 23.01.2009