方法注入(DI,.NET,IOC)

use*_*485 1 .net c# dependency-injection inversion-of-control autofac

我正在使用.NET(MVC5,Web API等).我理解构造函数注入(在愤怒中使用它相当新).我有一个类具有依赖的方法.我不想使用构造函数注入,因为每次实例化此类时我将创建依赖对象(并且大多数方法不使用此依赖对象).所以我认为方法注入听起来像它可能是事情.但是我无法弄明白该怎么做(我使用的是Autofac).

因此,如果我的方法是无效的DoSomething(字符串x,int y)并且该方法需要使用IMyService的实现,那么如何在不使用构造函数注入的情况下执行此操作?

我见过的唯一方法注入技术是在实例化时有效地调用方法的方法.这似乎对我的情况没有帮助,它仍然意味着即使我要调用不需要它的方法,所有实例都会创建此依赖项.

我确信它很简单,但我现在无法理解.你能帮一个例子吗?

UPDATE

这是它的关键.我喜欢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); 
       } 
   } 
}
Run Code Online (Sandbox Code Playgroud)

jga*_*fin 6

我不想使用构造函数注入,因为每次实例化此类时我将创建依赖对象(并且大多数方法不使用此依赖对象).

有问题.将该功能分解为新类.

也就是说,至少在我的经验中,当方法不适合类的其余部分时(或者具有其他地方未使用的依赖项),这是最佳解决方案.

您还应该考虑对象分配非常便宜,在性能受损之前每秒需要数百万次分配(除非您使用的是Ninject;))