java - 在 C# 中使用与在 Java 中导入
问题描述
我来自 Java 和 C++ 背景。但是,我现在正在做一个 C# 应用程序,一件事让我感到困惑。
在 Java 中,当我导入包时,这意味着我可以访问放置在该包中的类。例如,这里我ArrayList
从 package 导入了类java.util
。
import java.util.ArrayList;
class ArrayListUtilization {
public static void main(String[] args) {
ArrayList<Integer> myList = new ArrayList<>(3);
myList.add(3);
myList.add(2);
myList.add(1);
System.out.println(myList);
}
}
最近我在我的 c-sharp 应用程序中遇到了一个问题,我在这里问过。在我看来,有趣的是,当我添加以下代码片段时:
var accountDbContext = services.GetRequiredService<AccountDbContext>();
accountDbContext.Database.EnsureCreated();
var accountDbCreator = accountDbContext.GetService<IRelationalDatabaseCreator>();
accountDbCreator.CreateTables();
我看到如下错误:
错误 CS1929“AccountDbContext”不包含“GetService”的定义,并且最佳扩展方法重载“ServiceProviderServiceExtensions.GetService(IServiceProvider)”需要“IServiceProvider”类型的接收器
从错误文本中,我了解到accountDbContext
对象没有GetService
功能。但是当我按下 时show potential fixes
,它会建议我添加一个using
声明。
这是真正的解决办法。但是,我的问题是这个using
陈述对我的对象有什么影响?该对象是其类的实例。如何using
在我的对象上添加语句效果并为其添加函数?
解决方案
请注意,您在此处实际调用的扩展方法是:
accountDbContext.GetService<IRelationalDatabaseCreator>();
accountDbContext
没有一个方法叫做GetService
. GetService
在 中声明AccessorExtensions
,上面的行只是语法糖:
AccessorExtensions.GetService<IRelationalDatabaseCreator>(accountDbContext);
现在应该为声明扩展方法的类添加 using 指令以访问扩展方法是有意义的。
推荐阅读
- django - Django递归模型
- linux-device-driver - Genymotion 不显示虚拟设备
- visual-studio-code - VS Code:启用内联拼写检查器,但在“问题”面板中禁用拼写检查
- android - 导航抽屉和浮动按钮不能同时工作
- ios - 如何从苹果开发者帐户中删除密钥?
- php - 如何在 laravel 刀片模板中读取多级 JSON 值
- angular - AngularFireStorage 为每次上传返回未定义的 URL
- c++ - std map 如何知道使用 std 字符串的数据作为键
- wordpress - 将 WordPress 迁移到 https 和 docker
- javascript - 烧瓶 request.get.args - 缺少一个 arg