Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 加载未引用的dll MVC Ninject_C#_Asp.net Mvc 4_Dependency Injection_Msbuild_Ninject - Fatal编程技术网

C# 加载未引用的dll MVC Ninject

C# 加载未引用的dll MVC Ninject,c#,asp.net-mvc-4,dependency-injection,msbuild,ninject,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<St

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

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

public class WebModuleBindings : NinjectModule
{
    public override void Load()
    {
        Bind<IStaticDataRepository>().To<StaticDataRepository>();
    }
}
当我在本地运行它时,它可以正常工作,但是当我使用msbuild并部署我的应用程序时,绑定项目dll不包括在内,因为它没有在任何地方引用


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

您的web项目是主项目。作为主项目,web project有责任确保提供所有DLL。这将使部署更容易

您的web项目是一个宿主项目。作为主项目,web project有责任确保提供所有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 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项目引用引导程序和下一层。这可以使依赖项向下流动,并有助于对代码进行一点结构化。

为什么不将其添加为项目引用,并将其设置为
true
?无论哪种方式,毫无疑问,因为程序集没有部署到正确的文件夹。您的部署过程需要考虑这一点。如果我添加对绑定项目的引用,则web项目将间接引用每个项目,这意味着由于循环引用,没有其他项目可以引用我的web项目。这是否正常?为什么不将其添加为项目参考,并将其设置为
true
?无论哪种方式,毫无疑问,因为程序集没有部署到正确的文件夹。您的部署过程需要考虑这一点。如果我添加对绑定项目的引用,则web项目将间接引用每个项目,这意味着由于循环引用,没有其他项目可以引用我的web项目。这是否正常?如果我添加对绑定项目的引用,那么web项目将间接引用每个项目,这意味着由于循环引用,没有其他项目可以引用我的web项目。这是正常的吗?是的,web项目是起点,所以web项目应该参考其他项目,而不是其他方式。只有在后面的情况下,您才需要引用web项目,在这种情况下,通常可以重构代码(通过在单独的程序集中移动代码)因此,您没有对web项目的引用谢谢您的建议如果我添加对bindings项目的引用,那么web项目将间接引用每个项目,这意味着由于循环引用,没有其他项目可以引用我的web项目。这是正常的吗?是的,web项目是起点,所以web项目应该参考其他项目,而不是其他方式。只有在后面的情况下,您才需要引用web项目。在这种情况下,通常可以重构代码(通过在单独的程序集中移动代码),这样您就不会引用web项目。谢谢您的建议