我对一个需要DB调用的域实体做了一些验证。所以我想在我的域模型中使用我的仓库对象。我尝试使用Dependency注入,但它不做这项工作,并给我null
public class ObjectX : Base
{
public IObjectRepository _ObjectRepository;
public Location(IObjectRepository objRepo)
{
this._ObjectRepository= objRepo;
}
int someProperty{get; set;}
bool validateProperty()
{
bool isValid =_ObjectRepository.ValidateProperty(someProperty);
return isValid;
}
字符串
因此,这里objRepo变为null,因此构造函数也将null赋给_ObjectRepository。
是否可以在域模型中访问存储库对象?
2条答案
按热度按时间yrwegjxp1#
对于以数据为中心的对象,例如域实体,在对象的构造函数中注入依赖关系并不是一种常见的方法。这并不是说从DI容器中解析这些依赖关系是不可能的,但是DI容器旨在构建组件的对象图,这些组件往往是长期存在的,而不是数据对象,它们往往是短期存在的。一般来说,在同一个(数据)对象中混合运行时数据和存储的依赖关系可能会导致many complications。它归结为Nikola’s 1st law of IoC:
相反,更常见的方法是从Constructor Injection(如您在示例中所做的那样)移动到Method Injection。使用方法注入,您可以通过其公共API为已初始化的对象提供依赖项,而无需该对象存储其传入的依赖项。
在您的情况下,使用方法注入将导致以下代码:
字符串
注意如何:
ObjectX
的公共API(ValidateProperty
)接受IObjectRepository
作为方法参数。ValidateProperty
使用但不存储传入的依赖项。请注意:
ObjectX
的消费者。nfg76nw02#
你已经把它添加到你的IoC容器了吗?你可以在你的启动文件中做,
字符串