我开始使用依赖注入,并且在向基类注入依赖项时遇到了一些麻烦.
我有一个BaseController控制器,我的其他控制器继承.在这个基本控制器内部,我做了一些检查,例如确定用户是否具有查看当前页面的正确权限,检查是否存在某些会话变量等.
我在这个基本控制器内部有一个依赖项,我想使用Ninject注入,但是当我设置它时,就像我对其他依赖项一样,我告诉编译器:
错误1'MyProject.Controllers.BaseController'不包含带0参数的构造函数
这是有道理的,但我只是不确定如何注入这种依赖.我是否应该使用这种使用基本控制器的模式,还是应该以更有效/更正确的方式进行此操作?
从什么dll我可以获得拦截的扩展?我从http://github.com/danielmarbach/ninject.extensions.interception添加了Ninject.Extensions.Interception .那里没有运气.有一些样品有效吗?
我需要的是制作一个拦截器,它将从WcfClient传递到WcfServer一个具有不同参数的不同函数,这样我就不必在WcfServer代码后面实现已经实现的函数了.所以我已经实现的功能的签名是 -
public static T InvokeService<T>(MethodInfo MethodName, Type genericType, Type BlClass, params object[] ParamList)
Run Code Online (Sandbox Code Playgroud)
它的作用是通过BlClass激活Method并向其发送ParamList.我想制作一个拦截器,它将动态填充参数,同时解决WcfServer方面的问题.但首先我如何才能访问我的ninjectModule中的Intercept扩展?
在此先感谢您提供的任何帮助:)
ps试过:
using Ninject.Extensions.Interception;
Run Code Online (Sandbox Code Playgroud)
和:
using Ninject.Core;
using Ninject.Core.Interception;
Run Code Online (Sandbox Code Playgroud) 有人可以给我一个简单的DI和IoC示例吗?
我理解第一个,但无法得到第二个的实现.
我正在使用MVC 3,我真的想使用IDependencyResolver,但我无法理解.
是ninject一个选项还是需要?
是否有像nerdDinner这样的教程,我无法找到它?
有人可以给我一个研究它的链接吗?
dependency-injection ninject inversion-of-control asp.net-mvc-3
最近我转到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
我有下课
public class Foo
{
public Foo(int max=2000){...}
}
Run Code Online (Sandbox Code Playgroud)
我想使用Ninject为Foo注入一个常量值.我试过这个
Bind<Foo>().ToSelft().WithConstructorArgument("max", 1000);
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用时出现以下错误_ninject.Get<Foo>:
Error activating int
No matching bindings are available, and the type is not self-bindable.
Activation path:
3) Injection of dependency int into parameter max of constructor of type Foo
Run Code Online (Sandbox Code Playgroud) 我想替换这段代码:
Kernel.Bind<ITaskFactory<AlertTask>>().ToFactory();
Kernel.Bind<ITaskFactory<PopupTask>>().ToFactory();
Run Code Online (Sandbox Code Playgroud)
用这样的东西:
Kernel.Bind(scanner => scanner.FromThisAssembly().SelectAllClasses()
.EndingWith("Task").MAGICGOESHERE().BindToFactory()
Run Code Online (Sandbox Code Playgroud)
我试图创建一个IBindingGenerator,但在尝试从T获取ITaskFactory <T>时陷入困境.
我有一些代码如下所示.我是IoC和Ninject的新手,不知道如何将IOtherClass注入SomeService,以便Parallel.ForEach工作.我唯一的另一个猜测是将Parallel.ForEach移动到DoWork方法中?
谢谢你的帮助.
public class SomeService
{
Parallel.Foreach(items, item =>
new OtherClass.DoWork(item);
}
public class OtherClass:IOtherClass
{
public void DoWork()
{...}
}
Run Code Online (Sandbox Code Playgroud) 我有一个有两种不同实现的接口.
public interface IProducer
{
}
public class Producer : IProducer
{
}
public class FaultProducer : IProducer
{
}
Run Code Online (Sandbox Code Playgroud)
我有两个不同的类,它们都将IProducer作为依赖项.
public class ConsumerChannel
{
public ConsumerChannel(IProducer producer)
{
}
}
public class TradePublisher
{
public TradePublisher(IProducer producer)
{
}
}
Run Code Online (Sandbox Code Playgroud)
TradePublisher需要一个制作人,ConsumerChannel需要一个FaultProducer.我只能绑定IProducer到一个实现.在温莎我可以使用命名绑定来做到这一点,Dependency.OnComponent但我在Ninject中找不到类似的能力.有没有办法在Ninject中注入特定的依赖项?
我完成了建议的步骤,将Ninject添加到我的MVC应用程序中.我向DbContext控制器的构造函数添加了一个参数.
控制器:
public class MyController : BaseController
{
public ArticlesController(MyDbContext context)
: base(context)
{ }
}
Run Code Online (Sandbox Code Playgroud)
基础控制器:
public class BaseController : Controller
{
protected DbContext MyDbContext;
public BaseController(MyDbContext context)
{
MyDbContext = context;
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎运作良好.但是请给我一些问题.
Ninject能否确保我DbContext的清理和及时处理?
我为所有应用程序的控制器创建了一个基类来处理任何常见的初始化等.基类DbContext在构造函数中接受我的参数的实例.但这需要我也将此参数添加到我的应用程序中的每个控制器.有没有办法不要求这个?
我不确定创建一个我的实例是多么昂贵DbContext.是否有任何方法可以进行优化,只有在请求实际要求我访问数据库时才会创建它.
只是想对ninject中Kernel.Resolve和Kernel.Get之间的区别做一些澄清.
Kernel.Get状态的描述
通过使用与指定约束匹配的第一个绑定来获取指定服务的实例
Kernel.Resolve状态的描述
解析指定请求的实例.在消费者迭代枚举之前,实际上并未解析实例.
您可以在哪些情况下使用其中任何一种?(现在我正在使用Get)