#c# #asp.net-core #blazor
#c# #asp.net-ядро #blazor
Вопрос:
Итак, у меня есть следующий MongoDBService, который я создал:
public class MongoDBService
{
private const String CONNECTION_STRING = "mongodb://localhost:27017";
private const String DATABASE_NAME = "TestingTesting";
private readonly MongoClient _Client;
public MongoDBService()
{
_Client = new MongoClient(CONNECTION_STRING);
}
public IMongoCollection<T> GetCollection<T>()
{
return _Client.GetDatabase(DATABASE_NAME).GetCollection<T>(typeof(T).Name);
}
}
Я установил MongoDBService в качестве службы в моем asp.net запуск ядра.cs:
services.AddSingleton<MongoDBService>();
Затем я пытаюсь использовать сервис, вставив его на страницу .razor:
@inject Project.Services.MongoDBService
Я также инициирую экземпляр моего MongoDBService:
Project.Services.MongoDBService mongo = new Services.MongoDBService();
Но когда я затем пытаюсь его использовать, я получаю красную волнистую линию в методе FindAsync():
async Task GetAllClocks()
{
MongoDB.Driver.FilterDefinition<Project.Data.Clock> filter = MongoDB.Driver.Builders<Project.Data.Clock>.Filter.Empty;
MongoDB.Driver.IMongoCollection<Project.Data.Clock> cursor = await mongo.GetCollection<Project.Data.Clock>().FindAsync(filter);
}
Ошибка:
CS0411: аргументы типа для метода ‘IMongoCollection.FindAsync(FilterDefinition, FindOptions<Clock, TProjection>, CancellationToken)’ не может быть выведен из использования. Попробуйте указать тип
Я некоторое время искал в Google, и хотя звучит так, будто я оставляю компилятору решать, какой тип использовать, я уверен, что я явно указываю Project.Data .Тип часов. Абсолютно в тупике. Есть идеи?
Комментарии:
1. Предположение: для FindOptions требуется два параметра типа, а вы предоставляете только один. Если вы хотите вернуть объект Clock, попробуйте FindOptions<Clock, Clock> .
2. Эй, Рикардо, ты на самом деле прав, я создал новый экземпляр FindOptions и передал его в качестве аргумента методу FindAsync. Странно то, что мне никогда раньше не приходилось этого делать, я впервые сталкиваюсь с этой ошибкой.
Ответ №1:
FindOptions
требуется два параметра типа, а вы предоставляете только один. Если вы хотите вернуть Clock
объект, попробуйте FindOptions<Clock, Clock>
.
Комментарии:
1. Привет, Рикардо, спасибо за это. Есть идеи, почему в этом случае мне пришлось передать параметр FindOptions? Обычно filterdefintion<>.Empty достаточно для удовлетворения FindAsync()
2. На моей машине, использующей пакеты NuGet 2.11.2, мне не нужно передавать параметр FindOptions. Какую версию вы используете? Что у меня есть: клиент. getDatabase(«<db>»).getCollection<Clock>(«<коллекция>»). FindAsync(фильтр)
3. Мои MongoDB.Driver и MongoDB.Driver. Оба ядра тоже 2.11.2! Очень странно.