在我们的网络项目中,我们使用的是Ninject。现在我们正在为我们的应用程序添加插件。我们希望插件能够添加自己的绑定。 Ninject模块似乎是解决这个问题的合理解决方案。
但是,我没有看到任何有关如何避免以下问题的指导。如果插件将绑定添加到已经具有绑定的接口,该怎么办?现在,DependencyResolver在尝试解析该接口时会抛出异常。
我试图更改我们的DependencyResolver,它不需要重写我们已在主应用程序中编写的所有绑定语句。我不希望插件能够破坏我的主要应用程序。如果插件需要应用约束来使其绑定起作用,那么它就是它的责任。
所以这就是我想要的。
似乎我应该能够覆盖StandardKernel的解析方法,以便它可以实现这些规则。似乎知道绑定所属的模块将有助于解决问题。但我无法找到模块或模块名称作为上下文,请求,绑定信息等的一部分。
有关如何解决此问题的任何想法。我没有看到Ninject似乎回答了对模块化系统非常明显的需求。一个新模块不应该能够打破一个应用程序。 (它应该只能"打破"本身。)
答案 0 :(得分:0)
你应该看看Ninject.Extensions.ChildKernel。您可以为每个插件创建一个ChildKernel,然后将插件模块加载到他们自己的ChildKernel中。
这意味着插件不能依赖于另一个插件的绑定,但插件可能依赖于父内核(根/应用程序内核)的绑定。因此,您可以为插件提供某些类型/服务。
顺便说一句,如果Ninject.Extensions.ChildKernel的实现不符合您的需求,您可能会选择实现自己的扩展。这不是那么多代码(见ChildKernel source)