8

我正在启动一个多项目解决方案,它将有多个入口点,例如 Windows 服务、ASP.NET 网站、WebApi 控制器等。我已经选择了 SimpleInjector,因为它非常快而且我不需要任何高级特征。

我的理解是 SimpleInjector 应该在启动时集中配置。从以下基本示例项目集开始

  • NS.Controllers
  • NS.Core.Data
  • NS.Core.Data.Model
  • NS.Web
  • NS.WindowsService(假设它不会一直运行)

有多个入口点,SimpleInjector 的引导应该去哪里,可以/应该集中处理(在这种情况下,配置过程需要引用所有项目才能设置所有解决方案类)?

我是否应该有一个不引用其他项目的全局实例(例如 NS.Global.Container),并且每个入口点负责在启动时添加自己的实例要求(优雅地处理重复注册,例如 NS.Core.Model)?

我是否应该寻求使用 ResolveUnregisteredType 事件来处理请求的注册?

我只是缺乏一些小学生的知识吗?

更新:

Steven 在下面的评论中提供的链接为这个问题提供了彻底的答案。

在多层应用程序中定位 Ninject 模块的位置

如何在 mvc 站点的类项目部分中初始化 Ninject

4

2 回答 2

8

为什么不使用IPackage接口?您可以在每个模块中制作包,然后在每个入口点调用container.RegisterPackages();. 例如,所有配置NS.Core.Data都将位于NS.Core.Data.dll等等。然后,它将在NS.Web和中都可用NS.WindowsService。只需配置指定给它的类型,NS.Web然后调用container.RegisterPackages();等等。您的NS.Core.Data包裹可能如下所示:

public class CoreDataPackage : IPackage {
    public void RegisterServices(Container container) {
        container.Register<ISomeService,SomeImplementation>();
        // etc...
    }
}
于 2012-11-27T23:08:07.437 回答
5

每个入口点都应该有自己的引导容器。

NS.Web 应该有一个,因为那是一个网站(我在这里假设)。NS.WindowsService 应该有一个,因为那是 .exe(服务)。

其他项目看起来像类库,因此它们没有引导容器。

理论上,是的,您可以在每个类库中定义一个部分引导容器,然后您可以在主引导容器(在 Web/服务项目中)中使用它,让生活更轻松。然后,在部分容器中,您将为该类库的组件进行引导。

于 2012-11-27T13:48:34.313 回答