- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我很喜欢this suggestion on StackOverflow使用 IClock 接口(interface)为您的代码提供当前日期/时间,以便您可以在单元测试时提供不同的日期/时间(更不用说分解所有 DateTime.Now 引用了)。
我可以使用依赖注入(inject)来为我的服务层提供这个接口(interface)的实现。
但是,我的实体中有很多 DateTime.Now 引用(下面的示例)。解决此问题的首选方法是什么?
public class SampleEntity
{
private DateTime someField;
private DateTime someOtherDate;
public SampleEntity()
{
someField = DateTime.Now;
}
public bool SomeProperty
{
get { return someOtherDate < DateTime.Now.Date; }
}
public bool SomeFunction()
{
return SomeOtherDate < DateTime.Now.Date;
}
}
我可以将参数传递给函数和/或构造函数,但如果我从 ORM 检索实体,这仍然需要我显式设置一些内容。
最佳答案
如果你想使用IClock
, 你将不得不更换所有 DateTime.Now
与 Clock.Now
让你的类(class)参加IClock
构造函数中的实例:
public class SampleEntity
{
private DateTime someField;
private DateTime someOtherDate;
private readonly IClock _clock;
public SampleEntity(IClock clock)
{
_clock = clock;
someField = clock.Now;
}
public bool SomeProperty
{
get { return someOtherDate < _clock.Now.Date; }
}
public bool SomeFunction()
{
return SomeOtherDate < _clock.Now.Date;
}
}
至于通过 IClock
的具体实现在实例化实体时,大多数 ORM 框架提供可用于提供实体的自定义实例的 Hook 。
如果您的 ORM 不提供此类 Hook ,您仍然可以使用链接问题中接受的答案,该问题使用 public static Func<DateTime> Now = () => DateTime.Now;
供应商。
关于c# - 使用 IClock 和 DI 时如何在实体中引用 DateTime.Now?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8417654/
在我的 NinjectConfigurator 中有 container.Bind().To(); 我也试过 container.Bind().To().InSingletonScope(); 但是我
我想通过这个截屏视频学习 IOC 原理 Inversion of Control from First Principles - Top Gear Style 我尝试按照截屏视频进行操作,但在 Aut
我很喜欢this suggestion on StackOverflow使用 IClock 接口(interface)为您的代码提供当前日期/时间,以便您可以在单元测试时提供不同的日期/时间(更不用说
默认的 MVC 模板使用“@DateTime.Now.Year”来显示版权年份,但我更愿意在任何地方都使用 NodaTime。 我目前正在使用 Ninject 将一个 IClock 实例注入(inje
我是一名优秀的程序员,十分优秀!