我有一个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不包括在内,因为它没有在任何地方引用。
解决此问题的最佳方法是什么?
答案 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。这将使部署更容易