基于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相当陌生,让我所有的类和接口都公开(我肯定是错的)感觉像是糟糕的编码实践,所以我只是不太确定在这里该怎么做。

任何帮助都将非常感激。:)

基于OOP原则的c#依赖注入

如果您担心您的类/接口可能在当前程序集之外被引用,那么请查看内部访问修饰符:

https://learn.microsoft.com/it-it/dotnet/csharp/language-reference/keywords/internal

"内部访问的一个常见用法是在基于组件的开发中,因为它使一组组件能够以私有的方式合作,而不暴露给应用程序代码的其余部分。例如,用于构建图形用户界面的框架可以提供Control和Form类,它们通过使用具有内部访问权限的成员进行协作。因为这些成员是内部的,所以它们不暴露给使用框架的代码。

在程序集之外引用具有内部访问权限的类型或成员是错误的。"

请记住,在封装中有一个层次结构,所以如果一个类(例如)具有公共可见性,它的公共方法可以在实际程序集之外使用。然后,您必须小心避免让这些方法要求具有较低可见性的参数类型,否则会出现不一致。幸运的是,Visual Studio会就此向用户发出警告。