问题标签 [ninject-2]
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 - 使用自定义成员资格提供程序进行依赖注入
我有一个实现自定义成员资格提供程序的 ASP.NET MVC Web 应用程序。自定义成员资格提供程序接受UserRepository
其构造函数,该构造函数提供成员资格提供程序和 NHibernate 之间的接口。由UserRepository
Ninject IoC 容器提供。
但是,显然,当提供程序由 .NET 实例化时,这不起作用:无参数构造函数没有 UserRepository 并且无法创建一个(UserRepository 需要将 NHibernate 会话传递给它的构造函数),这意味着提供程序无法访问其数据存储。如何解决我的对象依赖性?
可能值得注意的是,这是一个使用 Ninject 改造的现有应用程序。以前,我使用无参数构造函数,它们能够与有参数构造函数一起创建所需的依赖项来协助单元测试。
有什么想法,还是我在这里把自己建在一个角落里?
asp.net-mvc - Asp.net Mvc - Kigg:在请求之间维护 HttpContext.Items 中的用户对象
首先我想说我希望这看起来不像我很懒,但是我在理解以下项目中的一段代码时遇到了一些麻烦。
我正在浏览源代码,我注意到一些对我自己正在制作的小项目有用的东西。在他们的 BaseController 中,他们有以下代码:
这不是我根据需要稍微调整的代码的精确副本。这部分代码我还是看懂的。他们将 IUser 存储在 HttpContext.Items 中。我猜他们这样做是为了不必在每次需要 User 对象时调用数据库。
我不明白的部分是他们如何在请求之间维护这个对象。如果我理解正确 HttpContext.Items 是按请求缓存存储。
因此,经过更多挖掘后,我发现了以下代码。
这是发生一些我不理解的魔法的部分。我认为他们使用 Unity 对每个请求进行一些依赖注入?在我的项目中,我使用的是 Ninject,我想知道如何获得相同的结果。
我猜 Ninject 中的 InRequestScope 与 UnityPerWebRequestLifetimeManager 相同?我还想知道它们绑定到哪个接口的哪个类/方法?由于 HttpContext.Items 在每个请求中都被销毁,它们如何防止丢失用户对象?
无论如何,这是一个很长的问题,所以我很感激任何朝着正确方向的推动。
c# - 如何将ninject本身注入具有扩展功能的静态类
我得到了一些带有扩展方法的静态类,它们使用存储库模式向实体添加“业务逻辑”。
现在有时我需要IRepository
在这些扩展函数中创建一个新函数。
我目前正在通过我正在扩展的对象访问我的 Ninject 内核来解决它,但这真的很难看:
我还可以创建一个静态构造函数,以某种方式从工厂访问 Ninject 内核,Ninject 2 中是否已经有基础设施?
有人知道更好的解决方案吗?有人对这种实现业务逻辑的方式有意见吗?
c# - 忍者:抽象类
我是否需要在抽象类中做一些不同的事情才能让依赖注入与 Ninject 一起工作?
我有一个带有以下代码的基本控制器:
我的模块如下所示:
这是我的Global.asax
:
当我IAccountRepository
用属性装饰属性时它起作用[Inject]
。
ninject - Ninject:共享 DI/IoC 容器
我想在我的应用程序的各个层之间共享容器。我开始创建一个静态类来初始化容器并在容器中注册类型。
我注意到还有一个 Resolve 方法。解决和获取有什么区别?
在我的单元测试中,我并不总是希望容器中的每个注册类型。有没有办法初始化一个空容器,然后注册我需要的类型。我将在单元测试中模拟类型,所以我也必须注册它们。
有一个 Inject 方法,但它说实例的生命周期不受管理?
有人可以让我以正确的方式吗?
如何注册、取消注册对象和重置容器。
.net - 在 MVC 应用程序中重置 Ninject 的 IKernel 容器的最佳方法是什么?
基本上在我的Global.asax
代码中,我有以下IKernel
用于 Ninject 设置的属性(也利用了 Microsoft.Practices.ServiceLocation)。一旦它出现在CreateKernel()
覆盖上,就会自动调用这个 Container:
和我的容器属性:
如您所见,我正在加载一个模块,该模块定义了我的接口<->服务绑定列表,但这对这个问题并不重要,但我的问题是 - 无论我看起来多么努力,我都无法得到当我重新启动 MVC 网站时,我的 _ container
null 再次被初始化。从编辑和重新保存 Web.config 文件(旧技巧)到刷新应用程序池甚至重新启动 IIS(!),我的容器显然仍然存在。我真的不明白这是怎么回事。我知道我的初始加载_container
为空并且SiteModule
加载正确。
这当然是一个问题,因为我现在希望为新创建的服务添加一些新绑定,并且容器永远不会返回 null :P
供参考。即使将我的断点移动到容器空测试中似乎也没有解决这个问题,不要问我这不能解决问题,但我知道 if 应该是有效的,因为在初始加载时有没有错误,一切都很好。
谢谢大家,如果您觉得需要查看,请SiteModule()
告诉我,我可以使用代码扩展这篇文章。
ninject - Ninject:在 Silverlight 中动态加载模块
我想动态加载模块的原因是为了避免循环依赖问题。我有以下层 View --> ViewModel --> DataProvider --> ServiceClient (wcf 代理)。
现在我想要一个可以跨这些层共享的静态 IoC 容器。我想让我的 View 可测试,为此我必须在各个层中注入各种依赖项并模拟这些依赖项。现在我面临的问题是在哪里声明和加载 ninject 模块。
我还意识到在 Silverlight 版本的 Ninject 中没有采用字符串参数的 Load 版本,可用于动态加载模块 Load("*.dll")。如何在 Silverlight 中实现动态加载
谢谢
asp.net-mvc - 我应该为每个模型创建一个接口吗?
我刚刚开始使用 Ninject 进行依赖注入 (DI),并且正在通过我的控制器工作,希望将它们与我的模型进一步分离。
目前,在我的控制器内部,我正在创建某个给定模型的实例,例如:
对于我以这种方式实例化的每个模型,我是否应该为它们提取一个接口,然后使用 DI 将这些东西联系在一起?
我目前正在执行此操作的一个示例是在我的 ActivitiesController 中:
这在我的 global.asax 中捆绑在一起:
这是正确的方法吗?我应该为在控制器内部实例化的每个模型创建一个新接口吗?
为正确方向的任何帮助和轻推欢呼:-)
asp.net-mvc-2 - 将依赖项注入基类
我从依赖注入开始,在将依赖注入基类时遇到了一些麻烦。
我有一个BaseController
控制器,我的其他控制器继承自该控制器。在这个基本控制器内部,我进行了许多检查,例如确定用户是否具有查看当前页面的正确权限、检查某些会话变量的存在等。
我在这个基本控制器中有一个依赖项,我想使用 Ninject 注入它,但是当我像其他依赖项一样设置它时,编译器告诉我:
错误 1 'MyProject.Controllers.BaseController' 不包含采用 0 参数的构造函数
这是有道理的,但我只是不确定如何注入这种依赖关系。我应该完全使用这种使用基本控制器的模式,还是应该以更有效/正确的方式这样做?
unit-testing - 模拟具有依赖关系的对象的数据上下文
我正在我的项目中编写一些单元测试,并且我对包含我想要测试的方法的控制器有一个数据上下文依赖项。
我正在使用 Ninject 注入依赖项和 Moq 来创建我的模拟数据上下文。我的 DI 使用IDataContext
我的 dbml 隐含的接口,并在整个注入过程中使用。
在我的单元测试中,我正在创建我的模拟数据上下文,如下所示:
Object reference not set to an instance of an object.
这会在执行 datacontexts 构造函数时在第二行引发异常。
我显然错过了设置它的基本部分,但是我见过的大多数 Moq 示例都涉及使用Setup()
.
我会以正确的方式解决这个问题吗?我应该创建我的IDataContext
界面的模拟还是其他东西?