gpt4 book ai didi

ninject - 与 Ninject 的后期绑定(bind)

转载 作者:行者123 更新时间:2023-12-05 00:07:37 26 4
gpt4 key购买 nike

我正在开发一个框架扩展,它使用 Ninject 作为 IoC 容器来处理动态注入(inject),但是我在尝试解决如何实现这一点时遇到了一些麻烦。

我的框架的期望是您将传递 IModule(s)所以它可以很容易地在 MVC、WebForms 等中使用。所以我的类结构如下:

public class NinjectFactory : IFactory, IDisposable {
readonly IKernel kernel;
public NinjectFactory(IModule[] modules) {
kernel = new StandardKernel(modules);
}
}

这很好,我可以在单元测试中创建一个实例并传入 IModule 的基本实现(使用 InlineModule 中的构建,似乎推荐用于测试)。

问题是直到运行时我才知道需要注入(inject)的类型,并且它们是通过我正在扩展的框架以如下方法请求的:
public IInterface Create(Type neededType) {

}

这就是我难过的地方,我不确定检查->创建(如果需要)->返回的最佳方法,到目前为止我有这个:
public IInterface Create(Type neededType) {
if(!kernel.Components.Has(neededType)) {
kernel.Components.Connect(neededType, new StandardBindingFactory());
}
}

这会将它添加到组件集合中,但我无法确定它是否创建了一个实例,或者我如何创建一个实例并为 .ctor 传递参数.

我是否以正确的方式进行此操作,或者 Ninject 甚至不打算以这种方式使用?

最佳答案

除非您想更改或扩展 Ninject 的内部结构,否则您不需要向 Components 添加任何内容。内核上的集合。要确定绑定(bind)是否可用于某个类型,您可以执行以下操作:

Type neededType = ...;
IKernel kernel = ...;

var registry = kernel.Components.Get<IBindingRegistry>();
if (registry.Has(neededType)) {
// Ninject can activate the type
}

关于ninject - 与 Ninject 的后期绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1965421/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com