正在加载未引用的dll MVC Ninject

本文关键字:dll MVC Ninject 引用 加载 | 更新日期: 2023-09-27 18:22:25

我有一个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不包括在内,因为它在任何地方都没有被引用。

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

正在加载未引用的dll MVC Ninject

当您有引导程序时,没有循环依赖关系。你的依赖流看起来像这样:

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项目同时引用引导程序和下一层。这样可以保持依赖关系的流动性,并有助于构建代码。

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