问题标签 [ninject-extensions]
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.
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 - 通过 TaskScheduler 使用 Log4Net 扩展的 Ninject 没有日志输出,也没有错误
我有一个使用 Ninject 和 Log4Net 的控制台应用程序项目。
当我在我的机器上运行应用程序时,日志记录工作正常。当我在生产服务器上运行该应用程序时,日志记录工作正常。当我通过正在设置的 TaskScheduler 任务运行程序时,该任务正在由其他用户运行,我没有得到任何附加程序的日志输出。我正在使用 RollingFileAppender、SmtpAppender 和 AdoNetAppender。奇怪的是,程序运行良好,只是没有记录任何内容。
我认为如果我在本地运行该应用程序正在运行,那么 log4net 配置就可以了。
我在程序的主要方法中解析记录器,然后在需要时通过构造函数参数注入它。这就是我在应用程序的主要方法中获取记录器的方式:
任何提示,指针或任何东西....因为我不知道还有什么可以尝试的。
c# - how to use Ninject intercept using InterceptAttribute
I have a NinjectWebCommon as follow. I am unable to get the TimingInterceptor to trigger on the method that has "Timing" attribute set. It works fine if the intercetor is defined at the class level where all method call is going to be intercepted, but I would like to have the ability to specify the method I want to intercept (opt in).
I do have the Ninject.Extensions.Interception.DynamicProxy added.
my Service class define as follow
Interceptor and attribute define as follows
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
:
我怎样才能让这个测试通过?
这是其余的代码,尽可能精简,这样您就不必参考原始问题
ninject - 是否可以将 Ninject Factory Extensions 的 ToFactory 方法与开放泛型一起使用?
我正在构建之前回答的问题,其中ICar
使用Ninject Conventions Extensions和自定义IBindingGenerator绑定实现,并且使用Ninject Factory Extensions 的方法和自定义实例提供程序ICarFactory
绑定接口。 ToFactory()
我正在尝试重构,以便我可以绑定和使用 a IVehicleFactory<T>
,其中T
被限制为ICar
,而不是之前的ICarFactory
. 这样,我可以在泛型类型参数中指定我想要的车辆,而不是在工厂的CreateCar()
方法中传入车辆类型的名称。
是否可以使用该ToFactory()
技术绑定开放的通用接口?
我有一种感觉,我在吠叫错误的树,但是当我通过它的名称指定一个类型时,将类型本身指定为泛型类型参数ICar
似乎是自然的演变......ICar
这是当前失败的测试:
和InvalidCastException
抛出:
和工厂界面:
还有自定义实例提供程序,我什至无法让调试器停止其断点,所以我真的不知道那里发生了什么:
编辑 1 - 更改 IVehicleFactory
签名和自定义实例提供程序
这是我将IVehicleFactory
签名更改为使用通用Create<T>()
方法,并显式绑定Mercedes
到自身。
以及返回第一个泛型类型参数名称的新自定义实例提供程序:
这是新的测试,仍然没有通过:
}
ANinject.ActivationException
被抛出:
我不知道为什么它找不到Mercedes
类,因为我明确地对它进行了自我绑定。你能看出我做错了什么吗?
c# - Ninject - 请求范围已被释放
我Ninject
在 MVC 3 应用程序中使用扩展 EventBroker 和 DependencyCreation。我已经安装并正在使用 Ninject.MVC3 包,因此OnePerRequestModule
.
我正在尝试将服务注入IParentService
到控制器中。IParentService
依赖于ChildService
通过 DependencyCreation 扩展创建的(无硬引用)。
这两个服务都在本地事件代理实例(本地到ParentService
)上注册。
我希望按请求确定范围,IParentService
并且希望依赖项和事件代理与. 我究竟做错了什么?IParentService
ScopeDisposedException
一些代码:
服务定义:
内核注册 (NinjectWebCommon)
堆栈跟踪:
编辑 - 更多细节
该错误在调用中设置的停用委托中引发RegisterOnEventBroker
,其中代码尝试取消注册在事件代理上注册的任何对象。它失败是因为事件代理范围已被释放,大概是因为父服务已被释放。据我所知,Ninject 只会为具有 Transient 范围以外的生命周期的对象调用 OnDeactivation 委托,所以为什么在注册父服务时这不起作用让RequestScope
我感到困惑。瞬态范围对于父服务来说是不够的,因为我正因为这个问题而遇到内存泄漏。
我开始怀疑这是否是 EventBroker 扩展中的错误。
c# - Ninject 控制台应用程序 - DebugException 没有实现?
刚刚启动了一个新的控制台应用程序项目。我添加了 Ninject、Ninject.Extensions.Logging、Ninject.Extensions.Logging.Log4Net
我已经像这样设置了ninject:
并收到类型加载异常:
来自程序集“Ninject.Extensions.Logging.Log4Net,版本=3.0.0.0,文化=中性,PublicKeyToken=c7192dc5380945e7”的“Ninject.Extensions.Logging.Log4net.Infrastructure.Log4NetLogger”类型中的“DebugException”没有实现。
只是想知道是否有人知道如何解决这个问题?或者 log4net 是你不应该在控制台应用程序中使用的东西..
inversion-of-control - 如何在 Ninject 中将对象传递给父对象的构造函数?
我有一种情况,我需要确定传递给 Ninject 中父对象的参数类型。
这是一个包含 Parent、Child 和 ParentFactory 的示例,负责创建这一切......
在绑定创建父级时,我使用了 ToFactory 方法进行了绑定:
这使得可以调用:
...得到我的工厂。
当我使用工厂时,我可以使用...
现在 - 这是我的问题。当工厂使用传递的配置创建父实例时,我希望根据配置的类型创建子实例的类型。
那么,当创建 IChild 时,我可以检查以查看调用父构造函数的参数 - 即我可以查看传递给工厂的 create 方法的配置类型吗?
c# - Ninject Binding by Convention 不适用于泛型类型
我正在使用 .NET 4.5,Ninject 3 和约定 lib 的绑定,如下所示:
这适用于:
但不绑定:
但是,如果我为泛型类的特定实现添加单独的绑定,则以前的绑定有效,例如:
但是添加每个单独的泛型类型违背了约定的目的,并且需要为每个可能的单独类型(例如 float、int、string 等)添加绑定......
您知道如何修改约定或添加另一个约定(甚至提供完全不同的解决方案)以支持我的命令的通用版本吗?即支持两级泛型。