我们正在使用NInject框架在我们的应用程序中实现IoC / DI。我们有内部类有内部方法。要实现IoC / DI,我们必须提取接口。但是如果我们在内部类中只有内部方法,我们就无法为该类提取接口。
在这种情况下,有没有办法实现IoC / DI(内部类只有内部方法),或者我们应该将内部方法更改为公共方法。请建议。感谢
答案 0 :(得分:3)
如果你的班级已经是内部的,那么内部和公共方法之间绝对没有区别。内部类的公共方法只在内部可见。
如果你继续注射混凝土课程,虽然你已经失去了DI的所有优点。所以是的,您应该提取(内部)接口并注入接口。这要求配置代码可以通过在程序集的同一程序集中的任何一个必须声明为友元程序集来访问类。此外,您必须配置Ninject以允许不允许任何公共类。请参阅NinjectSettings。
答案 1 :(得分:0)
您真正需要公开的唯一内容是界面(而不是具体实现)。
您可以使用抽象工厂或(更简单)Ninject将公共接口映射到内部混凝土;因此,您的客户端代码只需要请求一个实现接口的“事物”实例,您的工厂/容器将返回实现。
你应该阅读依赖倒置原则以及它与此相辅相成。
答案 2 :(得分:0)
您可以在AssemblyInfo.cs文件中使用InternalsVisibleTo属性,如此
[assembly: InternalsVisibleTo("Assembly_That_Should_Access_The_Internal_Class")]