正确使用共享静态'随机'单身实例?

时间:2014-05-13 08:56:49

标签: c# design-patterns static singleton

问题背景:

我目前有几个'随机'我的代码中的数字实例 - 用于两个类 - 我需要将随机生成的数字附加到我正在创建的某些文件夹的名称中。一旦工作 - 在这种情况下将文件映射到这些新文件夹 - 完成后立即删除。

代码:

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

private static randomNo = new Random((int)DateTime.Now.Ticks);

单例?或两个静态实例?:

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

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

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

1 个答案:

答案 0 :(得分:1)

您并不需要在整个应用程序中使用Random单例。大多数时候(包括在这种情况下)使用多个实例是一种比“理论正确性”更倾向于方便的标志,但是有一些合法的情况,其中不同的程序组件通过设计使用不同的RNG,以便每个组件的行为超过该计划的生命周期是确定性的。

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

container.RegisterType<Random>(new ContainerControlledLifetimeManager());

这不会在现场创建Random个实例;相反,它将指示容器,一旦解决了Random的请求,后续请求将使用同一个实例解析。

之后,只需要用container.Resolve<Random>()解析单例实例或使容器对容器可见,以便当您指示RNG实例解析RNG的一个用户时它会自动解析并注入RNG实例