Как добавить другой или второй идентификатор коллекции в UserState? - PullRequest
0 голосов
/ 21 сентября 2019

Могу ли я получить доступ к другому идентификатору коллекции в моей базе данных cosmos, используя userstate?Спасибо!

enter image description here

    var userStateStorage = new CosmosDbStorage(new CosmosDbStorageOptions
    {
        AuthKey = CosmosDBKey,
        CollectionId = CosmosDBCollectionNameUser,
        CosmosDBEndpoint = new Uri(CosmosServiceEndpoint),
        DatabaseId = CosmosDBDatabaseName,
    });

    var userState = new UserState(userStateStorage);

    services.AddSingleton(userState);

ОБНОВЛЕНИЕ: Я создал это так, но когда я проверяю космос, моя коллекция напоминанийзаполняется другой моделью класса (которую я использую на другом userState)

При запуске:

            var reminderStorage = new CosmosDbStorage(new CosmosDbStorageOptions
            {
                AuthKey = CosmosDBKey,
                CollectionId = CosmosDBCollectionNameReminder,
                CosmosDBEndpoint = new Uri(CosmosServiceEndpoint),
                DatabaseId = CosmosDBDatabaseName,
            });

            var reminderState = new UserState(reminderStorage);

            services.AddSingleton(reminderState);

В диалоговом окне:

 public class ReminderDialog : ComponentDialog
{
    private readonly IStatePropertyAccessor<BasicUserReminders> _reminderAccessor;

    public ReminderDialog(UserState userState)
        : base(nameof(ReminderDialog))
    {
        _reminderAccessor = userState.CreateProperty<BasicUserReminders>("Reminders");

        WaterfallStep[] waterfallSteps = new WaterfallStep[]
        {
            FirstStepAsync,
            SecondStepAsync,
        };
        AddDialog(new WaterfallDialog(nameof(WaterfallDialog), waterfallSteps));
    }

    private async Task<DialogTurnResult> FirstStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
    {
        var reminderState = await _reminderAccessor.GetAsync(stepContext.Context, () => new BasicUserReminders(), cancellationToken);

        var reminder = new BasicUserReminders.Reminder
        {
            Subject = "to drink water",
            Days = new List<int> { 4, 3, 2 },
            Frequency = "everyday"
        };

        reminderState.Reminders.Add(reminder);

        return await stepContext.EndDialogAsync();
    }

1 Ответ

0 голосов
/ 23 сентября 2019

Следуя формату наших предыдущих вопросов и ответов, я опубликую ответ без кода, чтобы вы не могли копировать / вставлять ?.Не стесняйтесь комментировать, если вам нужны разъяснения, но обновите свой вопрос дополнительным кодом.

Это не так много о том, что UserState может или не может получить доступ в вашей базе данных Cosmos.Это больше о том, что userStateStorage может получить доступ.Как видите, это экземпляр CosmosDbStorage, который закодирован для взаимодействия только с одной коллекцией.

Таким образом, нет, UserState не может получить доступ к другим коллекциям и не можетuserStateStorage.Однако вы можете создавать дополнительные / отдельные CosmosDbStorage экземпляры, которые обращаются к другим коллекциям, а также вводить их в зависимости.

Первый ответ

Я предполагаю, что вы использовали services.AddSingleton(user/reminderState) для каждого,Таким образом, у вас есть два UserState, введенные при запуске, верно?Итак, когда вы звоните public ReminderDialog(UserState userState), как он узнает, какой использовать?

У вас есть DI по-другому. Вот большой намек

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...