IComponentActivator Instance - PullRequest
       7

IComponentActivator Instance

1 голос
/ 03 июня 2010

Как я могу использовать экземпляр IComponentActivator для компонента, а не просто указать тип.

То есть вместо

Component.For<XYZ>.Activator<MyComponentActivator>();

Я хочу иметь возможность сказать

Component.For<XYZ>.Activator(new MyComponentActivator(someImportantRuntimeInfo));

Кроме того, есть ли способ, которым я могу динамически выбирать активатор для не специально зарегистрированного компонента? То есть я хочу иметь активатор, который просматривает разрешаемый тип, решает, может ли он активировать его, и если нет, ответственность за активацию следует передать активатору по умолчанию.

Итак, в основном я хочу глобальный IComponentActivator, который имеет следующую логику:

Create(Type type){
  if (ShouldActivate(type)){
    DoActivate(type);
  }
  else{
    // do default activation here somehow
  } 
}

Спасибо!

1 Ответ

1 голос
/ 03 июня 2010

EDIT Просто используйте ILazyComponentLoader


  1. Активаторы создаются контейнером, и нет возможности предоставить экземпляры OOTB.

Если вы действительно хотите это сделать, я бы сказал, что вы можете расширить сам контейнер.

  • Поместите ваши собственные активаторы instace в ExtendedProperties вашего компонента под известным ключом
  • наследуется от DefaultKernel
  • Переопределить CreateComponentActivator Метод
  • Там верните активатор из ExtendedProperties компонента

    1. Нет способа создать глобальный активатор. Вы можете добавить реализацию IContributeComponentModelCreation, которая переключает активатор на какой-то другой, когда вы создаете компонент, если вы действительно этого хотите.

Но самый важный вопрос таков:

Чего вы пытаетесь достичь, этот? Почему вы хотите сделать это в первое место?

...