【发布时间】:2021-03-08 10:58:07
【问题描述】:
我正在创建基于 DDD 的示例项目。
- 我创建了 SharedKernel 项目,其中我有我的 DomainEvents 类
public static class DomainEvents
{
public static IContainer Container { get; set; }
static DomainEvents()
{
Container = StructureMap.Container.For<GenericTypesScanning>();
}
public static void Raise<T>(T args) where T : IDomainEvent
{
foreach (var handler in Container.GetAllInstances<IHandle<T>>())
{
handler.Handle(args);
}
}
}
这是类 GenericTypesScanning
public class GenericTypesScanning : Registry
{
public GenericTypesScanning()
{
Scan(scan =>
{
// 1. Declare which assemblies to scan
scan.Assembly("MyLib");
// 2. Built in registration conventions
scan.AddAllTypesOf(typeof(IHandle<>));
scan.WithDefaultConventions();
});
}
}
- 在
MyLib项目中,我有AppointmentConfirmedEvent类和此事件的处理程序:
public class EmailConfirmationHandler: IHandle<AppointmentConfirmedEvent>
{
public void Handle(AppointmentConfirmedEvent appointmentConfirmedEvent)
{
// TBD
}
}
- 我有一个临时的 rest api 控制器,我想检查一切是否正确注册,我正在这样做:
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// GET: api/<ValuesController>
[HttpGet]
public IEnumerable<string> Get()
{
var appointmentConfirmedEvent = new AppointmentConfirmedEvent();
DomainEvents.Raise(appointmentConfirmedEvent);
return new string[] { "value1", "value2" };
}
}
但是当DomainEvents.Raise 被调用时,事件不会被处理,因为内部调用Container.GetAllInstances<IHandle<T>>() 返回空数组。
我用控制台应用做了类似的例子,一切正常。知道为什么它在 ASP.NET Core .NET 5 项目中不起作用吗?
-杰克
【问题讨论】:
标签: c# asp.net-core structuremap