如何使这个Spring Injection工作

时间:2012-04-08 07:31:34

标签: asp.net asp.net-mvc-3 spring spring-mvc

我在我的spring xml文件中有这个:

<object type="Test.Web.Utilities.TestClass, Test.Web" singleton="false" id="TestClass">
    <property name="TestService" ref="TestService"/>
</object>

在TestClass中我有这个:

public ITestService TestService { get; set; }

和此:

public void TestMethod()
{
var x = TestService.ExampleMethod();
}

接下来,我的控制器里面有这个:

TestClass t = new TestClass();
t.TestMethod();

但是,我似乎没有让这个工作。控制器上其他弹簧相关的东西效果很好。

任何想法我怎样才能让它发挥作用?

编辑:忘记添加,我得到的错误是NullReferenceException

2 个答案:

答案 0 :(得分:1)

这是行不通的,因为你是通过 new 创建TestClass实例的,而Spring当然不知道将依赖注入通过框架new创建的对象。你找不到可以做到这一点的.NET IOC框架(出于好的理由!)。

所以你需要做的是将TestClass的实例注入你的控制器。您可以使用请求或原型范围注册这些实例。

答案 1 :(得分:0)

您不能使用普通的“new”关键字,因为这是通过.NET VM处理的。你实际上需要调用Spring的Activator Context来为你提供一个实例。

首先通过调用:

获取Spring.NET Activator上下文
IApplicationContext ctx = ContextRegistry.GetContext();

然后,您可以获取在配置xml中指定的类的实例:

ITestService svc = (ITestService)ctx.GetObject("TestClass");

这使您可以通过XML文件配置实现ITestService接口的具体实现类。