3 层 ASP.NET MVC 应用程序中的依赖注入

2024-01-11

我有一个 3 层应用程序,各层是:

  • Web:表示层 (ASP.NET MVC) --> 只能看到 BLL
  • BLL:业务逻辑层-->只看到DAL
  • DAL:数据访问层

So the Web图层对我的一无所知DAL层。我的存储库接口和具体类DAL,它们用于BLL业务逻辑类中的层。问题是,为了解耦DAL and BLL,如何设置 Ninject 将我的存储库实现注入到BLL layer?

同样的问题是针对Web层和BLL层,我有接口和实现BLL我用它们Web层,我应该如何为此设置 Niject?


这个想法是为 DAL 和 BLL 定义接口。然后,您可以将此类接口的实例作为构造函数参数。例子

interface IDatabase
{
    // Methods here
}

您的 BLL 课程:

public class Bll
{
    IDatabase _db;
    public Bll(IDatabase db)
    {
        _db = db;
    }

    public void SomeMethod()
    {
        // Use db here
    }
}

然后在您的组合根目录(在 Web 应用程序中)中,您使用内核来配置这些依赖项:

 kernel.Bind<IDatabase>().To<ConcreteDatabase();

从控制器到 BLL,您需要相同的东西,但其工作方式相同。

除此之外,我认为您的依赖项设置不正确。一般来说,您不需要这些垂直依赖性。您应该以更扁平的层次结构为目标。我写了一篇关于此的博客文章:http://www.kenneth-truyers.net/2013/05/12/the-n-layer-myth-and-basic-dependency-injection/ http://www.kenneth-truyers.net/2013/05/12/the-n-layer-myth-and-basic-dependency-injection/

在我的博客文章中,我解释了这种层次结构的问题所在以及如何避免它。除此之外,它准确地描述了您的问题:ASP.NET MVC、BLL、DLL 和 Ninject 将其捆绑在一起。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3 层 ASP.NET MVC 应用程序中的依赖注入 的相关文章

  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • 实体框架 - 选择特定列并返回强类型而不丢失强制类型转换

    我正在尝试做类似的事情这个帖子 https stackoverflow com questions 1094931 linq to sql how to select specific columns and return strongly
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co

随机推荐

  • 创建 Liferay portlet 配置页面

    我正在尝试为 Liferay portlet 创建一个配置页面 以便我可以为其设置一些参数 例如 我想选择控制器在查看时应显示哪个页面 配置应位于此处 所以我为配置创建了一个控制器 如下所示 import com liferay porta
  • 学习WPF和MVVM

    我最近加入了一个新的开发项目 使用 WPF 和 MVVM 构建胖客户端应用程序 我在各种 NET 框架 从 1 1 到 3 5 以及所有主要技术中开发过应用程序 WebForms MVC 和 WinForms 在我所有的项目中 我都很享受其
  • 如何仅在 3 边应用盒子阴影? [复制]

    这个问题在这里已经有答案了 我在下面使用我的 CSS 页面 他在 4 边应用了方框阴影 我希望它只应用于右侧 底部和左侧 如何仅在 3 边应用框阴影 webkit box shadow 0 0 10px rgba 0 0 0 0 22 mo
  • 显示格式 ApplyFormatInEditMode

    我在 C 中使用 MVC 3 我有一个具有此属性的类 DisplayFormat DataFormatString 0 dd MMM yyyy ApplyFormatInEditMode true 我想在用户处于状态时强制执行验证EDIT
  • 将 cout 和 stdout 重定向到 C++ 中的字符串以进行单元测试

    我正在努力在单元测试下获取一些遗留代码 有时感知现有程序行为的唯一方法是从控制台输出 我在网上看到很多关于如何将 stdout 重定向到 C 中的另一个文件的示例 但是有没有办法可以将其重定向到内存中的流 以便我的测试不必依赖于磁盘 我希望
  • YouTube Iframe API onError 事件近几个月没有触发

    我非常确定 YouTube Iframe API onError 事件过去会触发 因为我运行一个基于此 API 的项目 但最近 onError 事件不会触发 即使是最简单的错误 这是一个基于官方页面的简单示例代码 https develop
  • Android USB 枚举

    我正在编写一个 Android USB 主机应用程序 我试图枚举与平板电脑连接的设备 我遵循开发者网站的 android USB 主机文档中的代码 我的代码如下 AndroidUSB活动 public class AndroidUSBAct
  • 不允许同一用户使用多个用户名多次连接到服务器或共享资源

    使用Windows 2008 R2 在我们的服务器上 我们收到此错误 不允许同一用户使用多个用户名与服务器或共享资源建立多个连接 断开与服务器或共享资源的所有先前连接 然后重试 尝试在命令行上映射驱动器时 但是 远程计算机没有打开资源管理器
  • 自动完成参数:列出静态字段,无需输入 ClassName::

    How to make auto completion list all static fields of a certain class that has appropriate variable type when ctrl space
  • 如何在 django 中的模板标签内获取模板的渲染输出?

    免责声明 这是一个后续问题我之前的问题 https stackoverflow com questions 5332640 how can i get a django template to render itself within a
  • 需要帮助理解证书链

    目前我正在编写一个java库来访问pointhq com的REST API 在开发 Android 客户端时 我意识到默认情况下不接受 SSL 证书 因此我编写了一个自定义 TrustManager 并添加了 pointhq com 证书
  • Spring、Jackson 和定制(例如定制反序列化器)

    由于对Spring还有些陌生 我遇到了一个problem https stackoverflow com questions 3535569 jackson json throws jsonmappingexception when flo
  • 动态启用/禁用 Azure WebJob 中的触发功能

    我们有一个 Azure Web 作业 它在 Functions cs 文件中具有两个方法 这两个作业都是由 Azure 服务总线中的不同主题触发的 由于这在运行时使用反射来确定要由命中主题的消息运行 触发的函数 因此代码中没有对这些方法的引
  • Xamarin 表单获取通话时长

    我有一个 xamarin forms 应用程序 当单击标签时它将打开拨号器 我想要实现的是 用户点击标签 gt 拨号器 ios 中的电话应用程序 打开 用户调用并结束 gt 返回应用程序 单击标签时我可以打开拨号器 我可以在我的应用程序中获
  • php://input 在 PHP 5.6.16 中只能读取一次

    PHP手册 http php net manual en wrappers php php声明使用 php input 打开的流支持查找操作 并且从 PHP 5 6 开始可以多次读取 但我无法使其工作 下面的例子清楚地表明它不起作用
  • 当没有输入时,currencyconverter可以忽略$符号吗

    在数据表中 我必须将输入验证为货币 当我删除 符号后输入值时 输入组件会抛出错误
  • Kendo UI jQuery 网格服务器端过滤

    我正在使用 Kendo UI for jQuery Grid 来显示一些数据 到目前为止 我正在使用客户端过滤和分页 其中所有数据记录都在对服务器的初始调用中返回 Web API 和 Dapper 在服务器端使用 然而 由于数据源随着时间的
  • 检查 lambda 表达式中的属性是否为 null

    我有一个试图绑定到列表视图的对象列表 我按两个属性排序 存在的问题是某些记录可能不具有其中一种属性 这会导致错误 我希望它仍然绑定具有该属性的记录 IEnumerable
  • Android图像变换矩阵,将触摸坐标平移回来

    我正在为 Android 构建一个 导航类型 应用程序 对于导航部分 我正在构建一个活动 用户可以使用触摸事件移动和缩放地图 这是位图 并且地图还可以使用指南针围绕屏幕中心旋转 我使用 Matrix 来缩放 转置和旋转图像 然后将其绘制到画
  • 3 层 ASP.NET MVC 应用程序中的依赖注入

    我有一个 3 层应用程序 各层是 Web 表示层 ASP NET MVC gt 只能看到 BLL BLL 业务逻辑层 gt 只看到DAL DAL 数据访问层 So the Web图层对我的一无所知DAL层 我的存储库接口和具体类DAL 它们