C# IOC是类级别的,但是数据库冲突呢?
有了IOC,我知道您可以通过编辑配置文件等来替代实现 但是,当类与特定的数据库表和存储过程相结合时会发生什么情况,您不能仅仅交换一个实现,因为类/实体与特定的表和存储过程相关联C# IOC是类级别的,但是数据库冲突呢?,c#,asp.net,database,inversion-of-control,C#,Asp.net,Database,Inversion Of Control,有了IOC,我知道您可以通过编辑配置文件等来替代实现 但是,当类与特定的数据库表和存储过程相结合时会发生什么情况,您不能仅仅交换一个实现,因为类/实体与特定的表和存储过程相关联 我说的对吗?当您将类A的实例注入类B的实例时,您这样做的基础是A履行了B可以依赖的契约,通常由接口指定(但也可以由类或超类完成)。如果B不满足该合同,则行为未定义 所以归结起来就是:当您以这种方式交互时,您不应该关心表结构是否匹配。您应该关心接口是否正确 而且,根据我的经验,ORM意义上的这类OO实体并不倾向于被注入。注
我说的对吗?当您将类A的实例注入类B的实例时,您这样做的基础是A履行了B可以依赖的契约,通常由接口指定(但也可以由类或超类完成)。如果B不满足该合同,则行为未定义 所以归结起来就是:当您以这种方式交互时,您不应该关心表结构是否匹配。您应该关心接口是否正确
而且,根据我的经验,ORM意义上的这类OO实体并不倾向于被注入。注入通常发生在服务提供者身上。当您将类A的实例注入类B的实例时,您这样做的基础是A履行了B可以依赖的契约,通常由接口指定(但也可以由类或超类完成)。如果B不满足该合同,则行为未定义 所以归结起来就是:当您以这种方式交互时,您不应该关心表结构是否匹配。您应该关心接口是否正确
而且,根据我的经验,ORM意义上的这类OO实体并不倾向于被注入。注入通常发生在服务提供商身上。克莱特斯所说的
public class CustomerService //may implement extend from some base
{
public ICustomerDao customerDAO { get; set; } //the injected object
}
CustomerService
是您的业务级别类(例如),您可以在其中使用IoC容器使用依赖项注入注入一些CustomerDao。您可以注入的内容由iccustomerdao
的合同定义。所以所有实现的东西都可以在这里注入。克莱特斯说的
public class CustomerService //may implement extend from some base
{
public ICustomerDao customerDAO { get; set; } //the injected object
}
CustomerService
是您的业务级别类(例如),您可以在其中使用IoC容器使用依赖项注入注入一些CustomerDao。您可以注入的内容由iccustomerdao
的合同定义。因此,这里将允许注入的所有实现功能。您提到的这种替换功能称为Liskov替换原则。您提到的这种替换功能称为Liskov替换原则。