我的解决方案中内置了一个专有事件模型,它有一个订阅实例化过程,该过程使用GetAllInstances()
SimpleInjector 的方法来定位事件的所有订阅者
public IEnumerable<ISubscriber<T>> GetSubscriptions<T>()
where T : IEvent
{
return _container.GetAllInstances<ISubscriber<T>>();
}
根据我是否注册所有实例,我的性能会出现巨大ISubscriber
差异
这是我用来注册的代码ISubscriber
internal void Configure(Container container)
{
container.RegisterManyForOpenGeneric(
typeof(ISubscriber<>),
AccessibilityOption.PublicTypesOnly,
(serviceType, implTypes) =>
container.RegisterAll(serviceType, implTypes),
AppDomain.CurrentDomain.GetAssemblies()
);
container.RegisterDecorator(typeof(ISubscriber<>),
typeof(SubscriberTraceDecorator<>));
container.RegisterDecorator(typeof(ISubscriber<>),
typeof(SubscriberExceptionDecorator<>));
}
当我在没有调用RegisterManyForOpenGeneric
容器验证的情况下引导容器时,大约需要 11 秒并返回结果:
配置警告:未检测到警告。
注册:计数 = 158
但是,当我取消注释对RegisterManyForOpenGeneric
容器验证的调用大约需要 72 秒并返回结果时:
配置警告:已检测到 136 个容器注册类型,这些类型被 181 个组件引用
注册:计数 = 475
我的问题是——这样可以吗,还是我在这里做错了什么?我一直在添加更多ISubscriber
的课程,现在启动(方式)太慢了......
更新
这似乎只是在 Visual Studio中运行的 WebAPI 项目的问题。从控制台应用程序引导需要 15 秒在 Visual Studio 中运行。将 WebAPI 项目部署到 IIS 后,验证需要 6 秒。