正在加载未引用的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不包括在内,因为它在任何地方都没有被引用。
解决这个问题的最佳方法是什么?
当您有引导程序时,没有循环依赖关系。你的依赖流看起来像这样:
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。这将使部署更容易