gpt4 book ai didi

c# - 类构造函数方法中与 IoC 的代码契约

转载 作者:行者123 更新时间:2023-11-30 15:08:20 24 4
gpt4 key购买 nike

我是 Code Contracts 的新手,我有一个关于如何将它与 IoC 集成的问题。我曾尝试在简单的测试程序(经典控制台项目)中使用代码契约,但现在我想在我的官方项目中使用它。问题是:如果我有一个容器在类的构造函数方法中提供我的服务接口(interface),我如何使用代码契约来检查传递的值?

经典场景可能是

[ContractClass(typeof(ArticoliBLLContract))]
public interfare IMyInterface
{
void method1(int a)
void method2(string b)
void method3(bool c)
}


[ContractClassFor(typeof(IArticoliBLL))]
public abstract class MyContractsClass : IMyInterface
{

public void method1(int a)
{
Contract.Requires<ArgumentOutOfRangeException>(a > 0,"a must be > 0");
}

public void method2(string b)
{
Contract.Requires<ArgumentOutOfRangeException>(!String.IsNullOrEmpty(b),"b must be not empty");
}

public void method3(bool c)
{
Contract.Requires<ArgumentOutOfRangeException>(c == true,"c must be true");
}
}


public class MyClass : IMyInterface
{
private ITFactory _factory = null;
private IMyDAL _myDAL = null;

public MyClass(ITFactory factory,IMyDAL myDAL)
{
if (factory == null)
throw new ArgumentNullException("factory");

if (myDAL == null)
throw new ArgumentNullException("myDAL");

_factory = factory;
_myDAL = myDAL;
}

public void method1(int a)
{
a = a*2;
}

public void method2(string b)
{
b = b + "method2";
}

public void method3(bool c)
{
c = false;
}
}

在这种情况下,我在哪里可以查看“factory”和“myDAL”?有没有办法将契约(Contract)放在抽象类中以使其保持在同一个类中?

谢谢!!!

最佳答案

构造函数参数的要求特定于特定实现 - 就像构造函数本身不会被继承一样,它们所需的参数也不会被继承。

我会像往常一样将它们表示为构造函数中的契约,但仅此而已——它们不应该是契约抽象类集的一部分。 (考虑另一个具体的子类,它在根本不使用这些参数的情况下实现了这些方法。这是一个完全合理的场景,任何事情都不应仅仅因为您没有这些值而失败。)

关于c# - 类构造函数方法中与 IoC 的代码契约,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5701089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com