- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
一般来说,我是 Ninject 和依赖注入(inject)的新手,所以请原谅我的菜鸟。 =)
我有多个 IConfig
接口(interface)的实现,它们扫描程序集及其依赖项以查找实现 IConfigOption
接口(interface)的类型。每个 IConfig
实现都从不同的来源检索它们的值。
这些实现将根 Assembly 从哪里开始扫描作为构造函数参数,我正试图提出一个注入(inject)这些值的绑定(bind)。到目前为止,我正在考虑以下内容:
Bind<IConfig>().To<Config>().WithConstructorArgument("rootAssembly", target);
我的问题是,我似乎无法找到一种方法来获取对将注入(inject) Config
类的 target
程序集的引用。如果没有 DI,我会使用 Assembly.GetCallingAssembly()
,但在这种情况下,这会生成绑定(bind)所在的程序集,而不是所需的目标程序集。
此外,我需要一种方法来指定将接收注入(inject)的类/成员的预期实现,例如,客户端类 A 请求一个Config
使用 RoleEnvironment
的实现者和客户端类 B 要求使用 ConfigurationManager
的 Config
实现者。以下是阐明预期用途的示例:
public class Client
{
[UseApplicationConfig]
public IHelper WithAppConfig { get; set; }
[UseRoleEnvironmentConfig]
public IHelper WithRoleEnvironmentConfig { get; set; }
}
public class Helper : IHelper
{
public Helper(IConfig config)
{
}
}
我感觉要么我从错误的角度看待这个问题,要么我错过了明显的东西,但我不确定我应该寻找什么。怎么做才是最好的方法?
非常感谢。
编辑:添加了预期用途的示例,并为清楚起见改写了问题的某些部分。
最佳答案
如果您想获取有关对对象发出的请求的详细信息,请使用重载 WithConstructorArgument(string, Func<IContext, object>)
.您可以使用提供的 IContext
查找程序集名称(使用调试器四处查看,听起来您的布局可能很复杂,所以我无法提供具体代码)。
作为如何使用它的示例:
//get the full name of the requested object
Bind<IFoo>()
.To<Foo>()
.WithConstructorArgument("bar",
c => c.Request.FullName);
但是,在我看来,您似乎从错误的角度看待它。如果我没看错你的问题,听起来你有一个类可以扫描你的程序集,然后决定注入(inject)什么而不是让 Ninject 为你做。我想这是您不使用 DI 时留下的东西?
我会看一下使用 WhenInjectedInto
的上下文绑定(bind)注入(inject)特定 IHelper
的方法或自定义属性你想要进入构造函数。看这里:https://github.com/ninject/ninject/wiki/Contextual-Binding
链接页面实际上有一个执行类似操作的示例,可能对您有用:
Bind<IWarrior>()
.To<Samurai>()
.When(request => request.Target.Type.Namespace.StartsWith("Samurais.Climbing"));
我可能仍会使用 WhenInjectedInto
或属性,因此您没有任何“魔术字符串”,以防您稍后重构您的 namespace 。
关于c# - Ninject:将客户端的程序集作为构造函数参数传递并使用属性从客户端指定所需的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10677636/
我有一个依赖于包 B 的包 A。当包 A 中的代码运行并访问包 B 中的类时,包 B 的状态将被解析 (4),而不是 Activity (32) 和包 B 的激活器也没跑好。我认为 bundle B
这个问题在这里已经有了答案: How to remove the space between inline/inline-block elements? (41 个回答) 关闭 7 年前。
我正在尝试使用 Java OpenAL 库。我在导入名为 libsoft_oal.so 的 native 库时遇到问题。 Java OpenAL 依赖于 OpenAL 软实现。我尝试根据他们在 git
我正在尝试启动我的应用程序。是一个 unicorn +工头+sinatra的应用。 这是我的 config.ru 文件: require "rubygems" require "sinatra" Bu
我有一个下拉列表,其中包含一些从数据库表中检索的值,我想要的是当单击按钮时它应该只获得选项标签的中间值,但只有那些类名为“get_this”的选项标签并离开那些选项,如果他们没有这个类 预期输出:值
我有一个index.php文件,需要一个通用的head.php文件,head.php文件中有几个Javascript文件,当这样尝试时,代码在源代码中看起来很好,但文件却不是实际上对文档做任何事情。
有人能帮帮我吗? 我已经像这样运行了 imsmod: $ insmod /data/mm/mmdev.ko epoll_rate=100 但是我得到一个错误: insmod: init_module
是否有键盘快捷键或插件可以在 Notepad++ 中打开 PHP 所需或包含的文件?我知道,在 Dreamweaver 中,执行此操作的命令是 Ctrl+D,但我似乎无法在 Notepad++ 中找到
我已经用 js 设置了一个显示/隐藏 div,但我很难弄清楚如何一次显示一个 div。目前发生的情况是,除非我再次单击原始链接来关闭该 div,否则每个 div 都会显示。 http://www.li
当我尝试将未分配的辅助分片分配给节点时出现错误。 { "error": { "root_cause": [ { "type": "remote_transpor
我正在构建一个 C++ 应用程序,使用 Netbeans 6.9 作为我的 IDE。我有一个 C++ 库,它是一个纯 C 库的包装器。 我已将文件正确添加到项目中(使用添加库文件选项)。这是 g++
我是一名优秀的程序员,十分优秀!