C# 如果不存在则创建方法不可用

C# 如果不存在则创建方法不可用,c#,azure,.net-core,azure-cosmosdb,C#,Azure,.net Core,Azure Cosmosdb,我有一个.Net核心应用程序,我已将cosmos nuget软件包安装到: Install-Package Microsoft.Azure.DocumentDB.Client 我正试图按照MS给出的说明进行操作,详细说明如何创建数据库和集合 使用依赖注入,我注册了IDocumentClient。但是,当我尝试在安装类中使用此方法创建数据库和集合时,以下方法不可用: public void Setup(IDocumentClient client) { await client.Crea

我有一个.Net核心应用程序,我已将cosmos nuget软件包安装到:

Install-Package Microsoft.Azure.DocumentDB.Client
我正试图按照MS给出的说明进行操作,详细说明如何创建数据库和集合

使用依赖注入,我注册了
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
命名空间,也会发生这种情况。

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

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

    await client.CreateDocumentCollectionIfNotExistsAsync(UriFactory.CreateDatabaseUri(databaseId), new DocumentCollection { Id = "Identity" });
}
通过这种方式,您需要将具体的
DocumentClient
类传递到setup方法中,而不是
IDocumentClient
接口

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

    await client.CreateDocumentCollectionIfNotExistsAsync(UriFactory.CreateDatabaseUri(databaseId), new DocumentCollection { Id = "Identity" });
}
完成此操作后,这些方法就可以正常使用了

虽然依赖注入/IoC通常更喜欢使用接口而不是具体的类,但在这种情况下可能是可以的,因为类的目的是专门设置和配置数据库:这里需要对底层技术有一定的了解

“虽然依赖注入/IoC通常更喜欢使用接口而不是具体的类,但在这种情况下,它可能还可以……”尽管它肯定不会使测试更容易(◔_◔)