Csharp/C#教程:Ninject:将父实例提供给正在解决的子项分享


Ninject:将父实例提供给正在解决的子项

我有这个类层次结构:

public interface ISR { } public interface ICU { } public interface IFI { } public class CU : ICU { } public class SR : ISR { public SR(IFI fi) { FI = fi; } public IFI FI { get; set; } } public class FI : IFI { public FI(ISR sr, ICU cu) { SR = sr; CU = cu; } public ISR SR { get; set; } public ICU CU { get; set; } } public class Module : NinjectModule { public override void Load() { Bind().To(); Bind().To(); Bind().To(); } } class Program { static void Main(string[] args) { var kernel = new StandardKernel(new Module()); var sr = kernel.Get(); } } 

当我运行此代码时,我有一个例外,因为我有一个循环依赖。 SR类需要注入一个IFI实例才能完成,FI类需要注入一个ISR实例。

当然,使用属性注入并不能解决这个问题。

我有一个特殊性:我需要首先构造ISR,并且必须将此实例赋予FI。 因此,ISR和IFI需要共享范围。

你会如何用Ninject解决这个问题?

处理此问题的最佳方法是重构您的设计以消除循环依赖。 几乎所有的循环依赖都可以通过适当的设计去除。 如果你有循环依赖,通常会有一个设计缺陷。 您很可能不履行单一责任原则。

否则,您必须执行双向属性注入并确保它们具有相同的范围。 例如来自NamedScope扩展的InCallScope。 见https://www.planetgeek.ch/2010/12/08/how-to-use-the-additional-ninject-scopes-of-namedscope/

上述就是C#学习教程:Ninject:将父实例提供给正在解决的子项分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/954114.html

(0)
上一篇 2021年11月20日
下一篇 2021年11月20日

精彩推荐