Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why do I need to create a DateTime service which returns DateTime.Now instead of using DateTime.Now directly?

I have been watching Jason Taylor presentation about Clean Architecture with ASP.NET Core (timing 35:52)

https://www.youtube.com/watch?v=dK4Yb6-LxAk&t=2134s&ab_channel=GOTOConferences

And he created a DateTimeService which returns DateTime.Now and registered via AddTransient method, he suggests using it instead of using DateTime.Now directly because in this case he doesn't have a dependency on the machine clock.

It's not clear to me why he doesn't have a dependency in this case, could you please explain how it works?

like image 415
Roomey Avatar asked Oct 14 '25 03:10

Roomey


2 Answers

If you were ever going to implement a different way for getting the current time all you would need to do is create a new implementation for your IDateTimeService instead of changing every single instance of DateTime.Now in your project.

An example would be to create a service that obtains the time with an external request or to easily create a mock for unit tests so you can properly assert results that are dependent on the date and time.

like image 130
404 Avatar answered Oct 17 '25 21:10

404


I believe MS has created ISystemClock specifically for this purpose.

like image 42
Alexei S Avatar answered Oct 17 '25 21:10

Alexei S



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!