繁体   English   中英

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

[英]Method injection (DI, .NET, IOC)

我正在使用.NET(MVC5,Web API等)。 我几乎了解构造函数注入(对于在愤怒中使用它非常陌生)。 我有一类具有依赖项的方法。 我不想使用构造函数注入,因为那样的话,每次实例化此类时,我都会创建依赖对象(而且大多数方法都不使用此依赖对象)。 因此,我认为方法注入听起来可能是事实。 但是我不知道该怎么做(我正在使用Autofac)。

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

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

我敢肯定这很简单,但我现在无法弄清楚。 你能帮我举个例子吗?

更新

这是关键。 我喜欢吉姆(Jim)提出的“懒惰”的想法,并且会尝试这一点。 我是否怀疑方法注入,如果是,我真的不明白它的意义-为什么使用它而不是构造函数注入?

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); 
       } 
   } 
}

我不想使用构造函数注入,因为那样的话,每次实例化此类时,我都会创建依赖对象(而且大多数方法都不使用此依赖对象)。

有问题。 将该功能划分为一个新类。

也就是说,至少就我的经验而言,当某个方法不适合该类的其余部分(或具有其他地方未使用的依赖项)时,最好的解决方案。

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

如果在构造期间实例化对象的成本是一个问题,则可以将其包装在Lazy<>以避免不必要的构造。 这将导致您的依赖项在对懒惰的.Value的首次调用上构建。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM