如果不存在,则无法创建方法。

3

我有一个 .Net Core 应用程序,已经安装了 Cosmos NuGet 包:

Install-Package Microsoft.Azure.DocumentDB.Client

我将尝试按照微软提供的 此处 给出的说明,详细介绍如何创建数据库和集合。
使用依赖注入,我已经注册了 IDocumentClient。然而,在我尝试在设置类中使用它来创建数据库和集合时,以下方法未列出可用:
public void Setup(IDocumentClient client)
{
    await client.CreateDatabaseIfNotExistsAsync(new Database() { Id = databaseId });

    await client.CreateDocumentCollectionIfNotExistsAsync(UriFactory.CreateDatabaseUri(databaseId), new DocumentCollection { Id = "Identity" });
}

在这两种情况下,这些方法会被标记为未知方法,IDE会提示我创建它们。即使在文件中定义了 Microsoft.Azure.Documents.Client 命名空间,仍然会发生这种情况。
1个回答

3

虽然这些方法存在于DocumentClient类中,但它们实际上不是IDocumentClient接口的一部分。

因此,您需要将具体的DocumentClient类传递到设置方法中,而不是IDocumentClient接口。

public void Setup(DocumentClient client)
{
    await client.CreateDatabaseIfNotExistsAsync(new Database() { Id = databaseId });

    await client.CreateDocumentCollectionIfNotExistsAsync(UriFactory.CreateDatabaseUri(databaseId), new DocumentCollection { Id = "Identity" });
}

一旦您这样做,这些方法就可以像正常方法一样使用。
虽然依赖注入/控制反转通常更喜欢使用接口而不是具体类,但在这种情况下可能是可以的,因为该类的目的是设置和配置数据库:这里需要了解底层技术。

1
虽然依赖注入/控制反转通常更喜欢使用接口而不是具体类,但在这种情况下可能还好。但这确实不会让测试变得更容易。(◔_◔) - ruffin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接