我有一个最近开始使用 Ninject 的 WinForms 应用程序。Ninject 的大多数教程都显示了自动装配的设置,如下所示:
using (IKernel kernel = new StandardKernel())
{
kernel.Bind<ITaxCalculator>()
.To<TaxCalculator>()
.WithConstructorArgument("rate", .2M);
var tc = kernel.Get<ITaxCalculator>();
Assert.Equal(20M, tc.CalculateTax(100M));
}
如果您打算在启动时为一个简短的脚本实现该类,那就太好了,但我不确定如何在应用程序的其他类和库中使用这些对象。我很好奇 Ninject 是否可以处理类似于本文中的 Spring 的依赖项。
package testbean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import writer.IWriter;
@Service
public class MySpringBeanWithDependency {
private IWriter writer;
@Autowired
public void setWriter(IWriter writer) {
this.writer = writer;
}
public void run() {
String s = "This is my test";
writer.writer(s);
}
}
然后,您可以在 XML 中指定要注入 IWriter 的实例。然后运行代码,这就是所有需要的:
package main;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import testbean.MySpringBeanWithDependency;
public class Main {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("META- INF/beans.xml");
BeanFactory factory = context;
MySpringBeanWithDependency test = (MySpringBeanWithDependency) factory
.getBean("mySpringBeanWithDependency");
test.run();
}
}
使用 Spring,它可以自动创建和注入 IWriter 依赖项,因此您不必担心如何将其获取到应用程序的其余部分。使用当前的 Ninject 教程,我一直无法找到一种方法来做到这一点,而是求助于将对象存储到另一个对象中,然后调用它,这不是最好的方法。
我一直在寻找一种使用 Ninject 自动装配依赖关系的方法,但还没有找到这个特定问题的答案。任何帮助是极大的赞赏。