问题标签 [ninject-conventions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net-mvc-3 - 使用 ninject 和基于约定的绑定处理应用程序设置
我在 MVC3 应用程序中使用 Ninject 并尝试切换到使用 ninject.extensions.conventions 的基于约定的绑定。
现在假设我有一个需要访问应用程序设置的类,例如:
我想我了解如何像这样使用 Ninject 进行正常绑定:
但是我该如何使用约定来做到这一点呢?
如有需要,可提供额外信息:
我正在使用 nuget Ninject.MVC3 包,在 App_Start/NinjectWebCommon.cs 的 RegisterServices 中,这就是我目前拥有的所有内容:
c# - 基于约定的构造函数字符串参数与 Ninject 的绑定
我在我的项目中使用 Ninject 作为 IoC 容器。我有以下课程:
在我的应用程序设置文件中,我有一个名为“someDatabase”的连接字符串。默认情况下,应该添加以下配置,以便将此连接字符串注入构造函数:
但我想实现这些字符串的基于常规的绑定。名称以“ConnectionString”结尾的字符串类型的所有构造函数参数的值应取自应用程序的 connectionStrings 配置部分并自动注入。我也想为 appSettings 部分实现类似的约定。这种方法在 Mark Seeman 的“Primitive Dependencies”文章(“原语约定”部分)中有更详细的描述。示例中使用了 Castle Windsor 容器。
是否可以使用 Ninject 实现这样的约定,最好的方法是什么?我已经尝试过 ninject.extensions.conventions 但似乎它没有这样的功能,是吗?
ninject - Ninject MetaData 约束 Get() 是否适用于子分辨率?
我ninject.extensions.conventions
用来绑定给定程序集中的所有实现,并用程序集名称标记它们作为绑定的元数据。我可以使用 Get 将这些项目拉回并提供 func 作为标准。
我想知道的是这个函数是否也适用于所有已解决的孩子?我担心的是,虽然我的逻辑现在有效,但如果我添加更多满足任何孩子不止一次的绑定,ninject 会抛出。
代码示例:
根据上面的示例,我知道 IRootDependency 将根据元数据过滤器解析为正确的绑定。
我正在寻找的是以下事实。
此过滤器不会向下馈送依赖链。IChildDependency 将抛出异常,因为虽然绑定指定了 MetaData,但它没有被查询。
ninject - Ninject 约定和拦截
我想用拦截属性装饰我的服务,然后让基于约定的绑定为我设置拦截器。我不希望我的属性从拦截属性继承......如果我可以避免的话。
例如,我有以下课程:
我知道我可以按如下方式绑定它:
如何使用属性和拦截器的不同组合来做到这一点?例如:
如果我有 Log 和 Authorize 属性,我必须配置 3 组绑定?(1 为无授权日志,1 为无日志授权,1 为日志和授权)。
更新:虽然我无法根据我原来的问题参数找到解决方案,但我确实偶然发现了一个类似的问题,这导致我最终得到了解决方案。这是源代码:
注意: Common.Interception.Interceptors命名空间位于一个程序集中,该程序集引用了 Ninject.Extensions.Interception(及其所有必需的依赖项)。我的属性是在一个单独的程序集中定义的,没有它们自己的依赖项。
MiscExtensions.cs
AlternateInterceptorRegistrationStrategy.cs
IInterceptorConfig.cs
拦截器配置文件
TraceInterceptor.cs - 只是一个示例拦截器
注意:这是一个简单的控制台应用程序,展示了如何连接属性/拦截器。这依赖于 Ninject.Extensions.Interception.DynamicProxy 和 Ninject.Extensions.Conventions (以及它们所有必需的依赖项)
ninject - 如何使用 Ninject 约定扩展将泛型类型与继承绑定
如何使用Ninject 约定InitializerForXXX
将(非泛型实现)绑定到IInitializer<XXX>
(泛型接口),以便请求解析名称以InitializerFor开头并以类似结尾的非泛型实现:IInitializer<T>
typeof(T).Name
其中没有非抽象类直接实现IInitializer<T>
,并且一些实现继承自其他实现:
InitializerForShadeOfBlue
继承自InitializerForBlue
InitializerForBlue
从抽象继承Initializer<Blue>
- abstract
Initializer<T>
直接实现IInitializer<T>
我希望我可以将 a.EndsWith(typeof(T).Name)
用于我可以使用的给定约定,因为在ShadeOfxxx静脉IInitializer<T>
中实际上有数百个初始化程序。如果我必须映射所有这些,我最好找到一种在运行时通过反射解决的方法。
鉴于以下情况:
更新:使用自定义绑定生成器进行绑定(请参阅下面的答案以了解实现)
主要方法
初始化工厂
初始化器
内容模型
ninject-extensions - 使用 Ninject 自定义实例提供者绑定成功,使用工厂方法参数解析
我一直在研究一个类似问题的公认答案,我认为具体工厂返回一个实现,该实现基于工厂方法上的字符串参数匹配具体实现上的命名绑定。
当工厂是抽象工厂并且我希望使用基于 Ninject 约定的绑定时,我正在努力让一个稍微复杂的示例正常工作。考虑以下测试:
这是我尝试使用火把和刀具玩杂耍的地方,因为我曾经在互联网上看到过:
当我尝试分配bicycleBuilderFactory
此错误时,我被刺伤并着火:
是否可以使用方法和自定义提供程序进行绑定,使用工厂方法参数( )以及泛型类型参数( )来解析类型? ToFactory()
"Germany"
IVehicleBiulder<BlueBicycle>, BlueBicycle
这是测试的其余代码,尽可能紧凑和可读。
VehicleBuilder 实现
车辆实施:
inversion-of-control - Ninject 约定与 Ninject 工厂扩展将多种类型绑定到一个接口
我正在尝试扩展题为Ninject Factory Extension Bind Multiple Concrete Types To One Interface by using Ninject Conventions for 基于约定的ICar
实现绑定的 SO 问题中提出的场景。
我正在研究由 Akim和他的 Gist撰写的公认答案,概述了完整的示例。
不同之处在于我已经用ICar
基于约定的绑定替换了显式绑定(或者至少尝试了它;)
当我尝试car
在测试中实例化变量时,我得到ActivationException
:
我怎样才能让这个测试通过?
这是其余的代码,尽可能精简,这样您就不必参考原始问题
entity-framework - 修复 EF4.1 上下文 + Ninject 组合的内存泄漏
我有一个 Windows 服务,它使用 NCron 定期运行一些作业。我最近介绍了 Ninject 并遇到了一些严重的内存问题,因为 EF 上下文(来自 EF4.1 的 ObjectContext)没有经过 GC(我对其进行了内存分析)。
值得一提的是,其中一些作业运行时间很长(10-15 分钟)并且是数据库密集型的。我知道 EF 可能不是此类工作的最佳解决方案,但目前无法重构。
我找到了很多关于这个主题的材料,所以我继续:
- 在我的工作课程中实施 INotifyWhenDisposed
- 尝试在命名范围内定义 EF 上下文绑定,希望在作业完成后能够正确处理和 GC
我似乎无法让第二个工作,我得到一个命名范围不存在的 ActivationException。
这是我在调试模式下尝试的一段简单代码,它复制了这一点:
接着
为了简洁起见,我把剩下的剪掉了。
我究竟做错了什么?
更新 1 - 构造函数注入有效,当我明确.Get<T>
表示异常发生时。
c# - 使用 Ninject Extensions 继承避免多重绑定
我有创建这样的层次结构的类:
基本上,这个想法是功能可以堆叠(每个派生级别将附加更多功能)。
我正在尝试使用 Ninject Conventions Extensions 以一种很好的方式绑定它。我所拥有的是:
当我请求DerivedHandler
. Ninject 一点也不抱怨。但是,当我请求 a 时BaseHandler
,我会看到:
有多个匹配的绑定可用。
显然,约定扩展正在考虑继承。当我请求BaseHandler
.. 它应该给我 aBaseHandler
还是 a DerivedHandler
?(我想要BaseHandler
..)。
有没有办法避免这种情况?我尝试了各种流利语法的组合,我可以得到“多个绑定”错误..或“未找到绑定”错误。
请注意,如果我手动绑定每个,这将非常有效。我认为这证明 Ninject 处理这个没有问题。它只是约定。
asp.net - 如何按约定正确绑定类型?
这些项目计划针对多平台,所以我在类库中提取了最大的代码,以便它可以轻松重用。
该架构基于模型-视图-演示者原则。
项目结构如下:
MVP
该项目包含项目的演示者和视图。例如:
视窗
该项目包含应用程序的 WPF GUI,以及所谓的 Composition Root。例如:
网络
该项目包含应用程序的 ASP.NET GUI 页面,以及所谓的 Composition Root。
嗯,我想你明白了……
我对依赖注入很陌生,甚至在约定绑定方面也很新。
我想知道如何使用 Ninject 使用约定配置绑定。
知道如何将这些视图与 Windows (WPF) 和 Pages (Web) 绑定吗?
编辑
在尝试了@BatteryBackupUnit 的建议后,我想我的问题全在于我对程序集的搜索。
如前所述,View
接口与类不在同一个程序集中Window
。上面的代码基于@BatteryBackupUnit 的回答,效果很好。