0

我有一个 MVC4 项目,我在其中使用 Ninject 作为 DI 框架。我遇到的问题是试图将我的 DI 绑定从我的实现中分离出来,因为我不希望我的主 Web 项目引用我所有的其他项目。

我试图创建一个名为 Bindings 的单独项目,其中包含 ninject 模块:

public class WebModuleBindings : NinjectModule
{
    public override void Load()
    {
        Bind<IStaticDataRepository>().To<StaticDataRepository>();
    }
}

然后我在我的网络项目中动态加载这个 DLL:

    kernel.Load(bindingDll);

当我在本地运行它时这很好用,但是当我使用 msbuild 并部署我的应用程序时,不包括绑定项目 dll,因为它没有在任何地方引用。

解决此问题的最佳方法是什么?

4

2 回答 2

2

当你有一个Bootstrapper时,没有循环依赖。您的依赖流看起来像这样:

Web Project
    |
    |_______________- Bootstrapper project. All of your Ninject Bindings, etc.
    |                 The Kernel is also created here and passed back to the
    |                 Web project.
    |                                   |
    |                                   |
    ▼                                   |
Business Layer --------------------------
    |                                   |
    |                                   |
    |                                   |
    ▼                                   |
Data Access Layer -----------------------

                       Possibly a dangling Entities/POCO project here

本质上,您的引导程序是您的组合根。它可以引用每个其他程序集,以便它可以访问绑定等所需的所有接口/具体实现。然后,您的 Web 项目引用 Bootstrapper 和下一层。这可以使您的依赖关系向下流动,并有助于构建您的代码。

于 2013-07-16T10:23:30.683 回答
1

您的 Web 项目是一个宿主项目。作为宿主项目,确保提供所有 dll 是 Web 项目的责任。这将使部署更容易

于 2013-07-16T10:03:38.253 回答