Hygieni c способ поделиться одним Random во всем приложении - PullRequest
2 голосов
/ 05 февраля 2020

Если вы используете System.Random повсюду, есть ли гигиенический c способ убедиться, что это синглтон для всего приложения? У меня есть несколько вариантов, включая следующие:

  • Global stati c member - это вызывает неприятный эффект необходимости звонить SomeClass.Random.Next(). Это может быть смягчено с помощью using static, но подход на самом деле не масштабируется, поскольку вы должны делать это везде.
  • Производный синглтон - просто производный от Random (это не sealed!) И создание этот класс - ленивый поточно-ориентированный синглтон
  • Зарегистрировать случайный случай в DI как синглтон и ввести - но введение Random в каждый класс действительно утомительно

В идеале я просто Я хочу вызвать rand() в любом классе и сделать так, чтобы все они ссылались на один экземпляр.

1 Ответ

3 голосов
/ 05 февраля 2020

это вызывает неприятный эффект необходимости звонить SomeClass.Random.Next()

нет, это не так: рассмотрите тип как:

internal static class Foo
{
    private static readonly Random s_random = new Random();
    // todo: any thread safety concerns
    public static int Rand() => s_random.Next();
    public static int Rand(int minValue, int maxValue) => s_random.Next(minValue, maxValue);
}

Теперь вы можете добавьте using static Declaration.Foo; вверху файла, который хочет его использовать, и , теперь , вы можете просто использовать Rand() без чего-либо еще.

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