我需要的是为每个dll中的某些事件类型注册具体的类。
public interface IDomainEventHandler<T> where T : IDomainEvent
{
void Handle(T domainEvent);
}
我不想扫描EventHandlers,因为一次又一次地在继承的类中注册和执行相同的处理程序,但我希望在structmap bootsrapper中调用每个dll中的初始化方法。
所以在每个dll(模块)中我都会包含类似
的内容 public void SetEntityEventHandlers()
{
ObjectFactory.Initialize(x =>
{
x.For<IEntityBeforeUpdateEvent<Person>>()
.Add<PersonBizObj>();
x.For<IEntityBeforeUpdateEvent<Person>>()
.Add<EmployeeBizObj>();
//lets say I have a ManagerBizObj which inherits from EmployeeBizObj and I do not want it in the //event handler loop
}
}
那么StructureMap有一个方便的方法吗,添加一个程序集(dll)明智的初始化函数?
答案 0 :(得分:1)
我使用Registry类来执行此操作。每个dll都有一个注册表类,用于初始化它拥有的类。 StrucureMap引导程序将每个注册表添加到配置中。
http://docs.structuremap.net/RegistryDSL.htm#section1
这些注册表类中的每一个都具有初始化其包含的类的代码。类似的东西:
ForRequestedType<IRepository>().TheDefaultIsConcreteType<InMemoryRepository>();
bootstrapper类具有以下代码:
ObjectFactory.Initialize(x =>
{
x.AddRegistry<FooRegistry>();
x.AddRegistry<BarRegistry>();
});