我有一个正在处理的项目,我不知道在编译时需要实例化哪个类。我正在尝试使用 Activator.CreateInstance() 根据用户输入为我生成一个新类。下面的代码运行良好,但我不得不将我的 INECCQuery 类上的构造函数更改为只有默认构造函数而不使用任何类型的依赖注入。有没有办法我仍然可以使用我的注入绑定和 Activator.CreatInstance()?我正在使用 Ninject 进行注射。
[HttpGet]
public ActionResult Index(string item) {
Type t = Type.GetType(string.Format("Info.Audit.Query.{0}Query, Info.Audit", item.ToUpper()));
if (t != null) {
INECCQuery query = (INECCQuery)Activator.CreateInstance(t);
var results = query.Check();
return View("Index", results);
}
return View("Notfound");
}
Run Code Online (Sandbox Code Playgroud)
在可能的情况下,构造函数注入始终是首选,但合适的备份是利用属性注入。
http://ninject.codeplex.com/wikipage?title=Injection%20Patterns
class SomeController {
[Inject]
public Object InjectedProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
基于您正在尝试替换的假设,Activator.CreateInstance您可以注入一个Func<T, INECCQuery>或任何您希望使用的工厂。