我正在使用.NET(MVC5,Web API等)。我理解构造函数注入(在愤怒中使用它相当新)。 我有一个类具有依赖的方法。我不想使用构造函数注入,因为每次实例化此类时我将创建依赖对象(并且大多数方法不使用此依赖对象)。 所以我认为方法注入听起来像它可能是事情。但是我无法弄明白该怎么做(我正在使用Autofac)。
所以,如果我的方法是 void DoSomething(string x,int y) 并且该方法需要使用IMyService的实现,如何在不使用构造函数注入的情况下执行此操作?
我见过的唯一方法注入技术是在实例化时有效调用方法的方法。这似乎对我的情况没有帮助,它仍然意味着即使我要调用一个不需要它的方法,所有实例都会创建这种依赖。
我确信它很简单,但我现在无法理解。你能帮我一个例子吗?
更新
这是它的关键。我喜欢Jim建议的Lazy的想法,并会尝试这个。我怀疑的方法注入也是如此,如果是这样的话,我真的不明白它的意义 - 为什么要使用它而不是构造函数注入?
public class MailService {
// lots of methods that don't need PlayerDataService
public void SendPlayersEmail() {
var service = new PlayerDataService();
var players = service.GetPlayers();
foreach(var player in players) {
SendEmail(player);
}
}
}
答案 0 :(得分:6)
我不想使用构造函数注入,因为每次实例化此类时我都会创建依赖对象(并且大多数方法都不使用此依赖对象)。
存在问题。将该功能分解为新类。
至少在我的经验中,当一个方法不适合该类的其余部分(或者具有其他任何地方都没有使用的依赖项)时,这是最好的解决方案。
你还应该考虑对象分配相当便宜,在性能受损之前你需要每秒数百万次分配(除非你使用的是Ninject;)
答案 1 :(得分:1)
如果在构造过程中实例化对象的成本是个问题,可以将其包装在Lazy<>
中以避免不必要的构造。这将导致您的依赖关系在第一次调用惰性.Value
时构建。