Castle Windsor:从其他装配中自动注册每种类型

时间:2016-01-13 21:04:42

标签: castle-windsor

我是温莎城堡的新手。

在一个程序集中,Domain.Classes

class GenericImplementation <BaseEntity>: IGenerticInterface<BaseEntity>
{
    // base on BaseEntity
    // does something
}

在另一个程序集中,我有界面,

container.Register(Classes.FromAssemblyNamed("Domain.Classes")
         .BasedOn(typeof(IGenerticInterface<>))
         .Configure(c => c.ImplementedBy(typeof (GenericImplementation<>)))
         .LifestyleTransient());

如何为程序集Domain.Classes中给出的每个BaseEntity(Entity1,Entity2,Entity3等)注册GenericImplementation?

我试过这种方式,但没有工作。

static class EmbeddedStringExtractor extends DoFn<Entity, String> {
  @Override
  public void processElement(ProcessContext c) {
    Map<String, Value> main_entity_map = DatastoreHelper.getPropertyMap(c.element());
    List<Value> embedded_entity_values = entity.get("embedded_entity").getListValueList();

      for (Value embedded_entity_value: embedded_entity_values){
          Entity embedded_entity = embedded_entity_value.getEntityValue();
          Map<String, Value> embedded_map = DatastoreHelper.getPropertyMap(embedded_entity);
          String embedded_name = DatastoreHelper.getString(embedded_map.get("name"));
      }

    // And then just c.output whatever you need.

   }
}

1 个答案:

答案 0 :(得分:0)

您可以按如下方式进行通用注册:

        container.Register(Classes.FromThisAssembly()
                 .BasedOn(typeof(IGenerticInterface<>))
                 .WithServiceAllInterfaces()
                 .Configure(c => c.LifestylePerThread()));

您可以更改.FromThisAssembly()以查看所需的任何程序集。

您可以更改.WithServiceAllInterfaces()以使用特定的实现,但在我们的系统中,我们使用其所有接口注册服务。