【发布时间】:2017-04-03 15:12:31
【问题描述】:
我正在努力实现一些可能不可能的事情。
我们有一个大型的 MVC 5 应用程序。我创建了一个小型 MVC 项目来模拟和解释我想要应用到那个大型 MVC 项目中的内容。
我有一个具有唯一 ID 的控制器。在此示例项目中,将为每个请求重新生成唯一 ID。在 MVC 项目中,它有点复杂和不同。但是,它与本示例的范围无关。
public class FooController : Controller
{
public string UniqueId = Guid.NewGuid().ToString("N");
public ActionResult Index()
{
var worker = new WorkerA();
worker.DoWork();
return View();
}
}
FooController 创建 WorkerA 再创建 WorkerB 再创建 WorkerC 等等。工人不一样。它们没有相同的接口/实现。为了使示例简单,我让它们看起来很相似。
这里是工人:
public class WorkerA
{
public string UniqueId = string.Empty;
public void DoWork()
{
var worker = new WorkerB();
worker.DoWork();
//...
//...
}
}
public class WorkerB
{
public string UniqueId = string.Empty;
public void DoWork()
{
var worker = new WorkerC();
worker.DoWork();
}
}
我想将属性 UniqueId 注入到 worker 中,而不必将其作为参数传递。
我想避免这样做:
public WorkerA(string uniqueId)
{
UniqueId = uniqueId;
}
但我需要为所有其他工人做同样的事情。
编辑
有没有办法通过 ninject 实现这一目标?
【问题讨论】:
-
初始化的时候不能设置属性吗?像这样
var worker = new WorkerA() { UniqueId = uniqueId } -
Worker 类的 uniqueId 是否与“父”FooController 类的原始 UniqueID 相同。还是所有 UniqueId 都是唯一的?
-
为什么不想传递变量?
-
将值注入每个
Worker比必须依赖上下文数据(如线程/http-context)更明智 -
@billybob 我认为您的问题的意义并不明确。目前尚不清楚您是否希望请求中的所有工作人员都具有相同的 ID。目前还不清楚是否也应该有未初始化(未注入)的 id。
标签: c# asp.net-mvc design-patterns asp.net-mvc-5 ninject