Asp.net mvc 4 如何在使用MVC4作为前端的onion体系结构中使用动态模块加载

Asp.net mvc 4 如何在使用MVC4作为前端的onion体系结构中使用动态模块加载,asp.net-mvc-4,ninject,onion-architecture,Asp.net Mvc 4,Ninject,Onion Architecture,我试着把我的脑袋绕在依赖注入上,我发现它在洋葱上使用了一个依赖解析层。但是事情太多了,我完全迷路了 所以我设置了一个项目来尝试它。我喜欢从简单开始,因此(MVC)控制器方法上的简单日志条目将是一个很好的开始。 我想使用(kernel.Load(*.dll”);),因为它是Ninject wiki推荐的 我的解决方案如下:(目前) 我想遵循所概述的依赖关系解决指南 Ilogger namespace Core.Services { public interface ILogger

我试着把我的脑袋绕在依赖注入上,我发现它在洋葱上使用了一个依赖解析层。但是事情太多了,我完全迷路了

所以我设置了一个项目来尝试它。我喜欢从简单开始,因此(MVC)控制器方法上的简单日志条目将是一个很好的开始。 我想使用(
kernel.Load(*.dll”);
),因为它是Ninject wiki推荐的

我的解决方案如下:(目前)

我想遵循所概述的依赖关系解决指南

Ilogger

namespace Core.Services
{
    public interface ILogger
    {
        void Log(string message);
    }
}
日志记录实施

namespace Infrastructure.Logging
{
    public class DebugLogger : ILogger
    {
        public void Log(string message)
        {
            Debug.WriteLine(message);
        }
    }
}
namespace DependencyResolution
{
    public class TestModule : NinjectModule
    {
        public override void Load()
        {
            Bind<ILogger>().To<DebugLogger>();
        }
    }
}
依赖项解析

namespace Infrastructure.Logging
{
    public class DebugLogger : ILogger
    {
        public void Log(string message)
        {
            Debug.WriteLine(message);
        }
    }
}
namespace DependencyResolution
{
    public class TestModule : NinjectModule
    {
        public override void Load()
        {
            Bind<ILogger>().To<DebugLogger>();
        }
    }
}

我需要运行
kernel.Load(“*.dll”)不知何故,我需要设置我的MVC以使用DI。我现在很确定,因为UI不知道依赖项解析层。您的DI容器应该在某个地方组成。该位置称为
合成根
,是最外层。在您的情况下,这将是ASP.NET MVC应用程序。所以说它不应该知道DI根本没有意义。Ninject.MVC3软件包附带了一个自定义依赖项解析程序实现,该实现插入到应用程序中,您将在控制器中获得自动DI。

这也让我感到困惑,但看看这个,我链接到UI层的解决方案不知道外部解析层。所以你们和我都很困惑:在这个图中
UI
,并不意味着
ASP.netmvc
。它意味着ASP.NET MVC的
V
。这就是用户界面。ASP.NET主机是配置依赖项注入框架的地方。理想情况下,这是在
应用程序启动
事件中完成的。所以我猜让你困惑的是图层的概念(因为我个人对此并不感到困惑)。您将ASP.NET MVC应用程序与onion体系结构中的层混淆。请阅读有关配置DI容器的组合根目录:我引用了他的帖子:
在ASP.NET MVC应用程序中,它是global.asax和一个自定义IControllerFactory
。值得一提的是,这篇博文的作者是马克·希曼,《金钱上的权利》的作者。我确实认为整个MVC项目都是架构的UI部分。不,这就是你困惑的原因。