在我们的程序中,我们称为WallclockDateTime
。因为我们可以改变时间,所以WallclockDateTime
与当前时间无关。但是现在我班上到处都需要这个WallclockDateTime
。
首先,我决定通过构造器之间的引用传递此WallclockDateTime
。但这需要大量维护。现在,我有了一个Foo
类,它是在Collection<Foo>
中大量创建的,而对这个WallClockTime
的遍历遍历构造函数的遍历对我来说似乎有点用处。所以我想:这不能做得更有效率吗?
首先,我尝试将中央WallclockDateTime
设为静态。 编辑:但是我不允许在静态属性内使用OnPropertyChanged()
,它是在解决方案外部使用的。
如果我将_wallclockDateTime
设为公开和静态,则无处不在!但这对我来说似乎很肮脏。那么,对此有什么好的解决方案?从构造函数传递到构造函数?还是让该领域公开且静态?还是其他聪明的解决方案?
private DateTime _wallclockDateTime;
public DateTime WallclockDateTime
{
get
{
return _wallclockDateTime;
}
set
{
if (_wallclockDateTime != value)
{
_wallclockDateTime = value;
OnPropertyChanged(nameof(WallclockDateTime));
OnPropertyChanged(nameof(CurrentSliderStateLabel));
OnPropertyChanged(nameof(WallclockDateTimeTicks));
}
}
}
// This class is used in a Collection<Foo>
public class Foo
{
private static DateTime _wallClockTime;
public Foo(ref DateTime wallClockTime)
{
_wallClockTime = wallClockTime;
}
public void Bar()
{
// Do something with the _wallClockTime
}
}
答案 0 :(得分:0)
通常的解决方案是使用依赖注入。您创建了一个服务提供商和一个支持您所有约会需求的服务。
Microsoft有一个依赖项注入系统Microsoft.Extensions.DependencyInjection。
您可以将服务放入其他服务的构造函数中,也可以直接访问它。
有一种观点认为依赖注入只是拥有全局变量的一种奇特的方式。另一方面,在大型系统中与每个服务的接口定义一起使用时,它可能确实会提高测试组件的能力。
另一条评论,在大多数情况下,DateTimeOffset优于DateTime,因为它消除了日期/时间相对于哪个时区的歧义。