Nie mogę skonfigurować umów kodowych w mojej klasie. Podążyłem za dokumentacją i przykładem, ale to nie działa.konfigurowanie umów kodu w interfejsie
chciałbym wstawić Code Contracts warunek do mojego interfejsu, oto mój kod
Interfejs
[ContractClass(typeof(ArticleBLLContract))]
public interface IArticleBLL
{
int getArticleNSheet(string IdBox);
IEnumerable<IArticle> getArticleValue(string IdBox, string IdLanguage);
}
Umowa Klasa
[ContractClassFor(typeof(IArticleBLL))]
public sealed class ArticleBLLContract : IArticleBLL
{
int IArticleBLL.getArticleNSheet(string IdBox)
{
Contract.Requires<ArgumentOutOfRangeException>(!String.IsNullOrEmpty(IdBox),"IdBox has no valid value");
return default(int);
}
IEnumerable<Base.Article.IArticle> IArticleBLL.getArticleValue(string IdBox, string IdLanguage)
{
Contract.Requires<ArgumentOutOfRangeException>(!String.IsNullOrEmpty(IdBox), "IdBox has no valid value");
Contract.Requires<ArgumentOutOfRangeException>(!String.IsNullOrEmpty(IdLanguage), "IdLanguagehas no valid value");
Contract.Ensures(Contract.Result<IEnumerable<Base.Article.IArticle>>() != null, "Return value is out of Range");
return default(IEnumerable<Base.Article.IArticle>);
}
}
Klasa zastosować kontraktu
public class ArticleBLL : IArticleBLL
{
public int getArticlNSheet(string IdBox)
{
try
{
return _Dal...
}
catch (Exception ex)
{
throw ex;
}
}
public IEnumerable<IArticle> getArticleValue(string IdBox, string IdLanguage)
{
IEnumerable<IArticle> article = null;
try
{
article = _Dal...
return article;
}
catch (Exception ex)
{
throw ex;
}
}
}
Próbowałem wstawić przerwania w tym wierszu
Contract.Requires<ArgumentOutOfRangeException>(!String.IsNullOrEmpty(IdBox),"IdBox has no valid value");
ale kiedy wywołać metodę nigdy nie przechodzi tutaj To jest moja konfiguracja projekt
Czy coś się stało?
Dziękujemy!
Próbowałem przekazać String.Empty w metodzie getArticleNSheet, ale wszelkie wyjątki zostały podniesione. Próbuję również zmienić na jawne implementacje interfejsu, ale nie podniosłem żadnych wyjątków. Czy coś jest nie tak w konfiguracji? Dziękuję – Faber
@Faber - Zakładając, że wszystko to jest w jednym zestawie, stwierdzam również, że umowa nie wydaje się być sprawdzona. Jeśli zmienię konfigurację Assembly Reference Assembly na "Build", zamiast "None", otrzymam ostrzeżenia, że muszę wdrożyć niestandardową walidację argumentów, lub jak powiedział Roy, przełącz na "Standard Contract Required" –
Próbowałem zmodyfikuj konfigurację, ale nie działa. Mam interfejs i umowy w jednym zestawie, ale klasa implementująca interfejs jest w innym zestawie. Jaka jest najlepsza konfiguracja do korzystania z umów kodu z większą liczbą kontraktów i utrzymaniem kontraktów również w wydanym kodzie? Dziękuję Ci!! – Faber