加载未引用的dll MVC Ninject

时间:2013-07-16 09:59:09

标签: c# asp.net-mvc-4 dependency-injection msbuild ninject

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

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

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

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

    kernel.Load(bindingDll);

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

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

2 个答案:

答案 0 :(得分: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和下一层。这样可以减少依赖关系的流失,并有助于构建代码。

答案 1 :(得分:1)

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