Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正确使用共享静态';随机';单例?_C#_Design Patterns_Static_Singleton - Fatal编程技术网

C# 正确使用共享静态';随机';单例?

C# 正确使用共享静态';随机';单例?,c#,design-patterns,static,singleton,C#,Design Patterns,Static,Singleton,问题背景: 目前,我的代码中有两个“随机”数实例——用于两个类中——我需要在创建的一些文件夹的名称中附加一个随机生成的数字。一旦工作完成(在本例中是将文件映射到这些新文件夹),它们将立即被删除 代码: 在上述每个类中,我都有以下代码的两个私有静态实例: private static randomNo = new Random((int)DateTime.Now.Ticks); 单身?还是两个静态实例?: 到目前为止,我没有遇到任何重复问题。我仍然觉得应该开发一个单例,在整个解决方案中共享一个静

问题背景:

目前,我的代码中有两个“随机”数实例——用于两个类中——我需要在创建的一些文件夹的名称中附加一个随机生成的数字。一旦工作完成(在本例中是将文件映射到这些新文件夹),它们将立即被删除

代码:

在上述每个类中,我都有以下代码的两个私有静态实例:

private static randomNo = new Random((int)DateTime.Now.Ticks);
单身?还是两个静态实例?:

到目前为止,我没有遇到任何重复问题。我仍然觉得应该开发一个单例,在整个解决方案中共享一个静态随机数对象实例

我正在使用IoC(Unity)创建我的所有类,但不确定应该如何处理共享静态随机实例?我可以在每个需要的类中“新建”singleton类吗?或者这会导致静态随机实例重置吗?我是否需要创建一个单例类并在需要随机生成数字的类之间传递它


我应该提到的是,我确实进行了检查,以确保在创建新文件夹名称时附加随机数,我确保该名称不存在。

在整个应用程序中,您不必严格使用
随机
单例。在大多数情况下(包括在本例中),使用多个实例是一种更倾向于方便而非“理论正确性”的标志,但也有一些合法的情况,即不同的程序组件通过设计使用不同的RNG,从而使每个组件在程序生命周期内的行为具有确定性

如果要移动到单例实例,应使用该实例指示容器应满足对具有相同实例的
随机
对象的所有请求:

container.RegisterType<Random>(new ContainerControlledLifetimeManager());
container.RegisterType(新ContainerControlledLifetimeManager());
这不会当场创建一个
随机
实例;相反,它将指示容器,一旦对
Random
的请求被解析,随后的请求将使用同一实例解析


之后,只需使用
container.Resolve()
解析singleton实例,或者使依赖关系对容器可见,以便在您指示它解析RNG的一个用户时,它自动解析并注入RNG实例。

潜在的问题我还不太清楚。你说的是复制。你的意思是不同的发电机可以产生相同的数字吗?一个生成器也可以连续两次生成相同的数字。@GolezTrol我想我想知道的是,我可以像现在这样使用两个私有静态变量吗?还是实现单例的最佳实践?我只是想知道我是否需要在类之间传递一个单例实例?您也可以传递一个单例。其优点是,您的应用程序不会严重依赖于它是单例的事实。如果您只是从应用程序中的任何地方调用singleton,那么重构它将需要更多的工作。另一方面,你什么时候需要改变它,会有多少电话…我必须承认,我不知道如何从Unity返回单身人士,特别是隐藏它是一个单例的事实。除非你有一个令人信服的理由以这样或那样的方式来搞乱care,否则如果你的代码中有一个或10个RNG变量,这应该没有什么区别。毕竟,它们都产生了均匀随机分布的随机数。做最有利于可维护性的事情,您可能不会误入歧途