Ninject - 基于子域动态指定连接字符串

2023-12-06

我正在尝试使用 ninject 根据 url 动态指定连接字符串。

我正在使用 ninject.mvc nuget 包,该包使用 webActivator。

我的代码如下:

我的注射:

kernel.Bind<IUnitOfWork>().To<UnitOfWork>()
  .WithConstructorArgument("connectionString", MvcApplication.GetConnectionStringName());

我的全局.asax

private static HttpContext _context;
public static string GetConnectionStringName() {
  var subDomain = String.Empty;

  if (_context != null) {
    subDomain = _context.Request.Url.SubDomain();
  }

  return String.Format("{0}ConnectionString", subDomain);
}

问题是 _context (在我的 Application_BeginRequest 中设置)始终为空,因为 WebActivator 在 application_start 之前运行。

ninject中是否可以指定调用MvcApplication.GetConnectionStringName() when a IUnitOfWork是必需的而不是在应用程序启动时?

对于我正在做的事情有更好的方法吗?

Thanks


您应该像这样使用 Ninject 绑定。

kernel.Bind<IUnitOfWork>().To<UnitOfWork>()
  .WithConstructorArgument("connectionString", context => MvcApplication.GetConnectionStringName());

注意context这是 Ninject 类型的IContext所以与HttpContext.

无论如何,我认为你的方法适合这个。

有时(特别是当要注入多个相关参数时)我更喜欢为配置创建一个接口和特定实现,并让它们通过像这样的标准绑定注入。

public interface IUnitOfWorkConfiguration {
    string ConnectionString { get; }
}

public class AppConfigUnitOfWorkConfiguration : IUnitOfWorkConfiguration {
    public string ConnectionString { get { ... } }
}

public class UnitOfWork {
    public UnitOfWork(IUnitOfWorkConfiguration configuration) {
    }
}

Bind<IUnitOfWorkConfiguration>().To<AppConfigUnitOfWorkConfiguration>();

使用这种方法,您可以避免将参数名称指定为字符串文字。

关于使用的更多注意事项HttpContext。由于线程安全问题,我不建议以这种方式使用它。您应该标记您的私有静态字段_context[ThreadStatic]属性或作为更好的选择,只需使用HttpContext.Current到处。

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

Ninject - 基于子域动态指定连接字符串 的相关文章

  • 从基本控制器继承 LINQ-to-SQL 数据上下文

    我的基本控制器类 BaseController 由面向公众的控制器继承 用于使用 LINQ to SQL 访问请求之间的共享数据上下文 我是否可以通过将数据存储在中来以高效且安全的方式访问我的数据上下文HttpContext Current
  • 如何在单击 Html.ActionLink 时加载部分视图?

    有人可以告诉我如何加载吗PartialView单击时在同一页面中Html ActionLink 我在下面列出了我的要求 我有一个索引页面 它将列出 员工 表中的员工 表中的每一行还将有 编辑和删除 链接 Html ActionLink 来更
  • 当前上下文中不存在名称“DefaultAuthenticationTypes”

    我正在尝试在我的 Web 应用程序中实现基于角色的授权 如下所示 HttpPost ActionName Login public ActionResult Login LoginViewModel model if ModelState
  • 与仅调用依赖函数/类相比,在 FastAPI 中使用 Depends 有哪些优点?

    FastAPI 提供了way https fastapi tiangolo com tutorial dependencies 通过其自己的依赖关系解析机制来管理依赖关系 例如数据库连接 它类似于一个pytest夹具系统 简而言之 您在函数
  • Azure git 部署 - 第二个程序集中缺少引用

    我正在尝试将 Bitbucket 部署设置到 Azure 网站 我成功链接了 Bitbucket 和 Azure 但是当我推送到 Bitbucket 时 我在 Azure 站点上收到以下错误 如果我单击 查看日志 它会显示以下编译错误 D
  • Laravel 5 包中依赖注入的最佳方法

    我正在为 Laravel 5 开发一个包 现在我需要受益于依赖注入来拥有一个更具可扩展性和可靠性的应用程序 我不知道最好采用哪种方法以及为什么 这是我的一段代码 我需要注射Lang类依赖 class MyController extends
  • 使用 Ajax Jquery post 请求进行 Json 劫持

    昨天 我读了一些关于如何预防的好文章使用 Asp Net MVC 进行 Json 劫持 http haacked com archive 2009 06 24 json hijacking aspx 规则是 永远不要通过 get 请求发送
  • 返回视图作为 JSON 对象的一部分

    我有一个应用程序只加载一次完整视图 我这样做的原因并不重要 重要的是 其余内容只会以部分视图的形式返回 除了一些内容之外 我还有一些 JSON 对象 我想通过每个 AJAX 请求在服务器之间来回传递 有没有办法返回一个 JSON 对象 并将
  • MVC Html.Partial 或 Html.Action

    我是 ASP NET MVC 新手 所以请耐心等待 我需要构建一个在多个视图中重复的菜单 什么可以更好地服务于目的Html Action http msdn microsoft com en us library ee703423 aspx
  • AngularJS:服务、提供商、工厂

    之间有什么区别Service Provider and Factory在 AngularJS 中 从我得到的 AngularJS 邮件列表一个惊人的线程 https groups google com forum msg angular 5
  • 在启用 LowercaseUrls 的情况下保留路由参数中的大小写

    我在用routes LowercaseUrls true 在我的 MVC 4 应用程序中 它运行得很好 但是 参数也会变成小写 所以如果我有一条像 routes MapRoute name MyController url foo hash
  • 我可以将 JSON 字符串转换为 JsonResult 吗?

    我在数据库中存储了一些存储的 JSON 字符串 我想将其作为 JsonResult 返回给客户端 我知道 Json object 将对象转换为 JsonResult 但如果我已经将结果存储在字符串中怎么办 我可以将其转换为 JsonResu
  • App_Web_XXX.dll 中发生 System.NullReference 异常 - 部分视图中出现错误

    当登陆我的 MVC 页面之一时 我收到此错误 dll 名称中包含随机字符串 类型的第一次机会异常系统 NullReferenceException发生在 App Web cjmhrrqn dll 中 附加信息 未将对象引用设置为对象的实例
  • 如何检查 MVC cshtml 页面中的调试模式

    如何检查 MVC cshtml 页面中的调试模式 此代码在 cshtml 页面中不起作用 bool isRelease false if DEBUG isRelease false else isRelease true endif if
  • 如何使用 EF Code First 解释枚举类型

    这是一个模型 Public class Person Key Public int PersonId get set Public int Age get set Public ColorEnum FavoriteColor get set
  • asp.net MVC 1.0和2.0货币模型绑定

    我想创建模型绑定功能 以便用户可以输入 等等 用于绑定到我的 ViewModel 的双精度值的货币值 我能够在 MVC 1 0 中通过创建自定义模型绑定器来执行此操作 但是自从升级到 MVC 2 0 后 此功能不再起作用 有谁有任何想法或更
  • 使用ViewData或不使用ViewData

    我一直在阅读 Professional ASP NET MVC 1 0 一书 并阅读其他有关从控制器到视图中使用 ViewModel 而不是 ViewData 的资料 但后来我看到很多 ViewData 的例子都被用在一些困难的场景中 除了
  • 为什么这条路线不匹配

    我在获取匹配路线时遇到一些问题 我使用 base 32 编码的 int 作为 Web 应用程序中幻灯片的短链接 每个幻灯片有 5 个不同的版本 我使用首字母来区分每个版本 路由始终匹配 除非 Base 32 编码 int 的第一个字符与指定
  • 盒式捆绑包与 MVC4 捆绑包

    我目前正在开发一个原型 ASP NET MVC 3 解决方案 该解决方案将用作多个项目重写的基础 来自 Web 表单 我的目标之一是跨应用程序实现一些脚本管理 而不是我们目前没有的目标 MVC 3有一个缺陷恕我直言 如果您需要在部分视图或模
  • MVC ASP.NET 或 Razor

    我对 MVC 很陌生 我对 Silver light WPF 和 MVVM 有相当多的了解 但对 MVC 知之甚少 我正在按照 Microsoft 网站上的主要教程进行操作http www asp net mvc tutorials get

随机推荐

  • ZMQ ROUTER中的客户端维护

    ZeroMQ ROUTER 套接字如何在内部维护其客户端连接 该指南称每个客户都会获得一个唯一的 ID 但并不清楚 什么算作客户端 每台机器不同的客户端或每个连接的应用程序不同 从客户端收到的请求数量是否有限制 原因是 我正在对这段代码进行
  • 图像比较并返回百分比

    int DiferentPixels 0 Bitmap first new Bitmap First jpg Bitmap second new Bitmap Second jpg Bitmap container new Bitmap f
  • Angular:承诺内的异步等待 - 事件监听器

    从一天起我就一直在这个问题上苦苦挣扎 我想创造这样一种情况 img 在 component ts 文件中我只想包含这一行 this userdp this userService getUserDp 在 getUserDp 中 代码如下 a
  • 如何重新标记 matplotlib 热图的轴刻度

    我正在关注这个例子生成热图 是否可以重新标记 X 轴上的值 并向其添加一个常量 例如 我希望 X 轴上的数字不是 0 1 2 3 4 而是 5 6 7 8 9 您可以使用关键字参数来标记 x 轴和 y 轴extent在致电imshow 这是
  • 如何从Python列表中生成所有可能的排列对? [复制]

    这个问题在这里已经有答案了 如何从 Python 列表中生成所有可能的对排列 Example input 3 8 2 output 3 8 3 2 8 3 8 2 2 3 2 8 您可以使用itertools permutations im
  • 带有 CTE 的 BigQuery UPDATE 语句

    正在寻求有关 BigQuery 的帮助 我似乎无法在 UPDATE 语句中使用 CTE 即 with ctename as select column1 column2 column3 from blah update table2 set
  • 如何禁用引导列中的垂直滚动

    我有两个引导列 左 和 右 我想用屏幕修复左栏并禁用滚动 但我想在右列中启用滚动 这将有更多内容 基本上我想显示帖子 使帖子标题显示在左列中 帖子内容显示在右列中 完全相同this 注 我用过overflow y hidden 但没有成功
  • 在主题中使用 fontFamily 属性时,Toast 会抛出 ArrayIndexOutOfBoundsException 和 appcompat v26

    每当我展示一个Toast 应用程序崩溃 如果我使用旧版本的 AppCompat 库或删除该应用程序 则该应用程序可以正常工作fontFamily从风格上 创建时 Override protected void onCreate Bundle
  • 在 Dataobject 中提交表单 - Silverstripe 3.1

    我正在使用 Aram 的 DataobjectAsPage 模块 现在我想在每个 DOaP 站点上都有一个表单 我在我的数据对象中创建了这样的表单 public function RegistrationForm fields new Fi
  • 获得mysql中每个人第二高的工资

    我们有如下表 person id salary 1 1500 1 1000 1 500 2 2000 2 1000 3 3000 3 2000 4 3000 4 1000 我们希望每个人的薪水都是第二高的 按每个人分组并获得第二高的工资 像
  • 不同实现之间的随机输出不同

    我已经用 libstdc libc 和 dinkumware 尝试过这个程序 include
  • 重新排列 SimpleCursorAdapter 中的列表视图项目

    我有一个数据库 SQLite 然后使用 SimpleCursorAdapter 将值显示到列表视图中 但是 我想重新排列列表视图项目并显示以 ID 1 开头的项目 然后显示 ID 号 2 的项目 依此类推 问题是 我无法理解基于重新分配列表
  • 如何将xpath的值放入html img标签中

    以下代码为我提供了适当的字符串 但我不知道如何将该值放入 html img 标签中
  • 将 Apache Cassandra 与 Apache Ignite 集成

    我正在尝试将 Apache Ignite 与 Apache Cassandra 3 11 2 集成 因为我想使用 Ignite 缓存现有 Cassandra 数据库中存在的数据 在浏览了在线资源之后 到目前为止我已经完成了以下工作 已下载阿
  • 仅指定操作时如何将一个控制器设置为默认控制器?

    我正在使用 MVC 2013 中的标准 MVC 模板 有一个Home具有 关于 联系 等操作的控制器 有一个Account具有登录 注销等操作的控制器 该应用程序部署在域中website 网址http 网站将产生 Home Index 的输
  • 在javascript中将十六进制颜色转换为整数

    我正在尝试将十六进制颜色字符串转换为 JavaScript 中的 int color int 必须与 VB6 的格式相同 我认为字节顺序不正确 例如 255 是红色 ff0000 16776960 是水色 00ffff 我有一个函数可以做相
  • C:传递(双重)赋值

    我在 C 中使用过这样的构造 list gt head list gt tail NULL 现在我考虑这是否真的如我所想 这是什么意思吗 list gt head NULL list gt tail NULL or list gt head
  • 以 Stellar JS 为中心的 CSS 背景图像

    我正在使用 Stellar JS 将背景图像设置为元素 并尝试实现以视差移动的居中图像 然而 当我尝试使用标准方法时 我意识到背景位置是由恒星更新的 然后恒星会覆盖居中 我假设这就是覆盖它的原因 我创建了一个小提琴来解释这种情况 http
  • 仅允许某些字符

    我想阻止输入除 0 9 a z A Z 范围内的字母数字字符之外的所有字符 所以当有人打字时 例如 没有任何内容写入输入 我怎样才能做到这一点 您需要编写一个函数来监听onkeypress事件 然后检查表单是否包含任何不需要的字符 如果包含
  • Ninject - 基于子域动态指定连接字符串

    我正在尝试使用 ninject 根据 url 动态指定连接字符串 我正在使用 ninject mvc nuget 包 该包使用 webActivator 我的代码如下 我的注射 kernel Bind