基于OOP原则的c#依赖注入
本文关键字:依赖 注入 OOP 原则 基于 | 更新日期: 2023-09-27 18:12:32
我在c#中编写基本依赖注入时遇到了一个问题,
设置的东西我有一个接口IStorage包含IObject GetObject(int objID)。
我有两个窗体:
- frmMain
- frmSearch
frmMain包含以下代码:
private readonly IStorage newStorage;
public frmMain()
{
newStorage = new Storage();
}
frmSearch包含以下代码:
public frmSearch(IStorage newStorage)
{
}
但是我收到错误:
可访问性不一致:参数类型为"应用程序"。与方法Application.frmSearch.frmSearch(IStorage)相比,IStorage更难访问
我意识到解决这个问题的方法是使我的接口公开,但这迫使我也使对象类公开。我对OOP相当陌生,让我所有的类和接口都公开(我肯定是错的)感觉像是糟糕的编码实践,所以我只是不太确定在这里该怎么做。
任何帮助都将非常感激。:)
如果您担心您的类/接口可能在当前程序集之外被引用,那么请查看内部访问修饰符:
https://learn.microsoft.com/it-it/dotnet/csharp/language-reference/keywords/internal"内部访问的一个常见用法是在基于组件的开发中,因为它使一组组件能够以私有的方式合作,而不暴露给应用程序代码的其余部分。例如,用于构建图形用户界面的框架可以提供Control和Form类,它们通过使用具有内部访问权限的成员进行协作。因为这些成员是内部的,所以它们不暴露给使用框架的代码。
在程序集之外引用具有内部访问权限的类型或成员是错误的。"
请记住,在封装中有一个层次结构,所以如果一个类(例如)具有公共可见性,它的公共方法可以在实际程序集之外使用。然后,您必须小心避免让这些方法要求具有较低可见性的参数类型,否则会出现不一致。幸运的是,Visual Studio会就此向用户发出警告。