【发布时间】:2015-01-13 18:11:06
【问题描述】:
My Setup:
Visual Studio 2013
Web Forms/MVC project
C#
Ninject 3.2.0.0
Entity Framework
我有一个使用 Ninject 作为其 IoC 容器的 Web 表单/MVC 混合项目。直到今天,我对 Ninject 没有任何问题。我遇到的问题是,每当我使用类时,我都无法让 Ninject 新建一些对象。这是一些有效的代码:
// Master1.master
namespace TestCode
{
public partial class Master1 : MasterPage
{
[Inject]
public FooController Foo { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
// Do some setup logic.
Foo.Bar();
}
}
}
下面是一些不能使用类的代码:
// Master1.master
namespace TestCode
{
public partial class Master1 : MasterPage
{
protected void Page_Load(object sender, EventArgs e)
{
new Wrapper().SomeMethod();
}
}
}
// Wrapper.cs
namespace TestCode
{
public class Wrapper
{
[Inject]
public FooController Foo { get; set; }
public void SomeMethod()
{
// Do some setup logic.
Foo.Bar();
}
}
}
我的问题是当我执行 SomeMethod() 时,Foo 为空。为什么会这样,我该怎么做才能让 Ninject 成为新的 Foo?
【问题讨论】:
-
很确定你需要使用 Ninject 来给你你的对象。只是调用
new不会进行任何注入,因为 Ninject 从未运行过,也没有任何东西告诉 Ninject 运行和注入。 -
您需要从 ninject 内核中获取 Wrapper 类,而不是新建它。关键字
new很好地表明您已经偏离了DI 路径。 Ninject 不会神奇地覆盖new关键字。
标签: c# asp.net asp.net-mvc inversion-of-control ninject