我在我的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
答案 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接口的具体实现类。