假设我有一个需要静态属性的方法,并且我想创建单元测试,所以我将它包装在一个包装类中。让我们调用接口 IFoo 和具体类 Foo。
现在,如果从 MVC 视图中调用我的方法,如何将包装器实例放入该方法中?
显然,我可以在我的控制器构造函数中添加一个 IFoo 参数,在我的视图模型中添加一个 IFoo 属性,在我的方法中添加一个 IFoo 参数,然后将它传递到链中;控制器、视图模型、视图、扩展方法。这似乎让我无法接受。
那么有没有更清洁的方法来做到这一点?
我认为 DI Container 是要走的路。老实说,到目前为止我还不需要一个,我天真地假设我只需添加 Ninject,将具体类型绑定到接口,然后在我的方法中进行以下调用。
var dt = kernel.Get<IFoo>();
我认为这将帮助我避免上面提到的整个构造函数参数/属性跟踪。现在我知道我仍然需要从某个地方获取内核变量,但我想我记得看到一些关于使用线程/会话/请求范围调用它的东西。我以为我可以实例化同一个内核实例,而不管它在哪里被调用,但是当我查看它时,我发现这仅适用于内核正在调用的对象实例......而不是内核本身。
那么,有没有办法让一个 Foo 的实例进入方法而不通过一堆除了传递它什么都不做的对象传递它?