我刚刚开始使用Ninject 2.0和ASP.NET MVC 2.因此,我有一个接口IMongoRepository和类MongoRepository.
MongoRepository接收参数字符串集合.
根据我想要使用的集合,我在MongoRepository的参数中传入一个不同的值.我希望我正确地说这个,但是我如何根据我使用的控制器映射不同的参数?
例如,在Article控制器中我会调用:
_articlesRepository = new MongoRepository("Articles");
Run Code Online (Sandbox Code Playgroud)
在PageController中我会调用:
_pagesController = new MongoRepository("Pages");
Run Code Online (Sandbox Code Playgroud)
我想做的只是做构造函数注入,然后传入IMongoRepository.任何想法或建议?
顺便说一句,我只是在学习IOC/DI; 所以,我愿意接受IOC忍者的任何提示!谢谢!
dependency-injection ninject constructor-injection ninject-2 asp.net-mvc-2
我在我的MVC项目中使用Ninject 1.5.它运行良好,但由于我们有Ninject 2,我可以升级(并且另外使用每个请求行为,这在1.5中无法正常工作).Ninject 1.5具有InjectPropertiesWhere功能,在Ninject 2中缺失(至少在我前一段时间测试它时).有类似的东西吗?
示例InjectPropertiesWhere:
return Bind<IUserService>().To<UserService>()
.InjectPropertiesWhere(p => p.Name.EndsWith("Repository"))
.InjectPropertiesWhere(p => p.Name.EndsWith("Service"))
.InjectPropertiesWhere(p => p.Name == "ApplicationCache")
.InjectPropertiesWhere(p => p.Name == "CurrentPrincipal")
.InjectPropertiesWhere(p => p.Name == "CTEmailSender")
.InjectPropertiesWhere(p => p.Name == "CTSettings");
Run Code Online (Sandbox Code Playgroud) 我最近更新了ASP.NET MVC 3应用程序到Ninject 2.2.
以前我在主应用程序中有以下接口实现绑定:
Bind(typeof(IMyInterface<>)).To(typeof(MyImplementation<>)).InRequestScope();
Run Code Online (Sandbox Code Playgroud)
另外,我在主应用程序加载的另一个程序集中有以下内容:
var arg = new ConstructorArgument("info", "something");
Bind<IMyInterface<MyClass>>().To<MyImplementation<BlogComment>>().WithParameter(arg);
Run Code Online (Sandbox Code Playgroud)
这在以前工作得很好,并且正在认识到更具体的实现(带有参数的实现).但是,当我升级到Ninject 2.2时,我收到以下错误:
Error activating IMyInterface{MyClass}
More than one matching bindings are available.
Activation path:
2) Injection of dependency IMyInterface{MyClass} into parameter myParam of constructor of type SomeOtherClass
1) Request for IMyInterface
Suggestions:
1) Ensure that you have defined a binding for IMyInterface{MyClass} only once.
Run Code Online (Sandbox Code Playgroud)
从2.0到2.2的变化导致了这种变化,是否有解决方法?
Inject属性不适用于字段.
[Inject]
public MyContext context; //Not injected
[Inject]
public MyContext context {get; set;} //Injected
Run Code Online (Sandbox Code Playgroud)
我正在使用默认的Ninject设置.为什么不注入田地?
我正在尝试第一次实现测试驱动的开发.我的项目是dotnet 3.5中的ac#.我已阅读在C#书中专业测试驱动开发,现在我想测试我的项目包含Windows service.I've读到最好的做法是,所有代码必须在test.The以下是我的窗口服务实现方法onStart和onStop
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Threading;
using log4net;
namespace MyUcmaService
{
public partial class MyUcmaService : ServiceBase
{
private Worker _workerObject;
private static MyUcmaService aMyUcmaService;
private Thread _workerThread;
private static ILog _log = LogManager.GetLogger(typeof(MyUcmaService));
public MyUcmaService()
{
InitializeComponent();
aMyUcmaService = this;
}
protected override void OnStart(string[] args)
{
// TODO: inserire qui il codice necessario per avviare il servizio.
//Debugger.Launch();
AppDomain.CurrentDomain.UnhandledException += AppDomainUnhandledException;
try
{
_workerObject = new Worker(); …Run Code Online (Sandbox Code Playgroud) 我开始使用依赖注入,并且在向基类注入依赖项时遇到了一些麻烦.
我有一个BaseController控制器,我的其他控制器继承.在这个基本控制器内部,我做了一些检查,例如确定用户是否具有查看当前页面的正确权限,检查是否存在某些会话变量等.
我在这个基本控制器内部有一个依赖项,我想使用Ninject注入,但是当我设置它时,就像我对其他依赖项一样,我告诉编译器:
错误1'MyProject.Controllers.BaseController'不包含带0参数的构造函数
这是有道理的,但我只是不确定如何注入这种依赖.我是否应该使用这种使用基本控制器的模式,还是应该以更有效/更正确的方式进行此操作?
在IoC和DI .NET库的简短视图中,我选择使用Ninject2.根据DDD风格:
我的问题是如何使用Ninject2在WCF中注入存储库.我已经阅读了一些使用Ninject2的文章,但是提供了非常简单的示例(例如:在同一个类库中的依赖注入).任何迹象都很有用:).
非常感谢!
最近我转到MVC 3和Ninject 2.在大多数代码中,我使用构造函数注入,但是有一些地方,我必须使用Inject属性.Ninject 2注册自己的IDepencyResolver接口.我不喜欢DependencyResolver类是System.Web.Mvc命名空间的一部分,因为它的功能与MVC并没有真正的严格关系,但现在,当它存在时,我可以做
public SomeClass
{
public IUserService UserService { get; set; }
public SomeClass()
{
UserService = DependencyResolver.Current.GetService<IUserService>();
Run Code Online (Sandbox Code Playgroud)
代替
public SomeClass
{
[Inject]
public IUserService UserService { get; set; }
Run Code Online (Sandbox Code Playgroud)
所以我不必Ninject在我的类中引用命名空间.应该DependencyResolver这样使用?
asp.net-mvc dependency-injection ninject ninject-2 ninject.web.mvc
我目前遇到了一个问题,试图在每个被拦截的类实例中连接一个拦截器实例.
我正在InterceptorRegistrationStrategy中创建和建议并设置回调来解析内核中的拦截器(它有一个注入构造函数).请注意,我只能在回调中实例化拦截器,因为InterceptorRegistrationStrategy没有引用内核本身.
IAdvice advice = this.AdviceFactory.Create(methodInfo);
advice.Callback = ((context) => context.Kernel.Get<MyInterceptor>());
this.AdviceRegistry.Register(advice);
Run Code Online (Sandbox Code Playgroud)
我正在获得每个方法的拦截器实例.
是否有任何方法可以为每个被拦截的类型实例创建一个拦截器实例?
我在考虑命名范围,但截获的类型和拦截器不会互相引用.
ninject ioc-container interceptor ninject-2 ninject-extensions
我刚刚开始在一个(大型)项目中使用Ninject,并且只是使用DI来启动它的一部分.我有一个使用构造函数注入广泛组织的子系统.使用Ninject注入这个子系统中的类之间的所有依赖关系是很好的.但是,我依赖于子系统之外的东西,我真的想使用Ninject自动注入,但不要负责它们的生命周期.
我认为Bind<T>.ToConstant(...)这对我想做的事情有用.例如,我可能有一个类型的Monkey类作为Singleton,但我的应用程序的另一部分是在没有Ninject的情况下处理它的生命周期(例如,创建它并手动处理它).当我的Ninject配备子系统被创建时,我实例化一个内核,绑定我的子系统类,然后使用类似Bind<Monkey>.ToConstant(Monkey.Instance)绑定到各种"外部"依赖项的东西.这在激活时工作得很好但在我处理内核时不能按需工作.我的子系统可以比这些外部依赖项具有更短的生命周期,但是当我在内核上调用Dispose时,所有这些依赖项都会被释放,这不是我想要的.虽然我可以通过两种方式看到参数,但是Ninject会自动处理它没有创建的对象似乎有点可疑.我希望至少有一种方法可以选择退出这种行为,但到目前为止我还没有发现任何东西.这有什么支持吗?
ninject-2 ×10
ninject ×7
c# ×3
asp.net-mvc ×2
.net ×1
interceptor ×1
moq ×1
nunit ×1
tdd ×1
wcf ×1