我是温莎城堡的新手。
在一个程序集中,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.
}
}
答案 0 :(得分:0)
您可以按如下方式进行通用注册:
container.Register(Classes.FromThisAssembly()
.BasedOn(typeof(IGenerticInterface<>))
.WithServiceAllInterfaces()
.Configure(c => c.LifestylePerThread()));
您可以更改.FromThisAssembly()
以查看所需的任何程序集。
您可以更改.WithServiceAllInterfaces()
以使用特定的实现,但在我们的系统中,我们使用其所有接口注册服务。