Я ищу библиотеку или исходный код, который предоставляет методы защиты, такие как проверка нулевых аргументов. Очевидно, что это довольно просто построить, но мне интересно, есть ли там уже .NET. Основной поиск Google не показал многого..NET Class Class Library?
ответ
Существует CuttingEdge.Conditions. Пример использования со страницы:
public ICollection GetData(Nullable<int> id, string xml, ICollection col)
{
// Check all preconditions:
id.Requires("id")
.IsNotNull() // throws ArgumentNullException on failure
.IsInRange(1, 999) // ArgumentOutOfRangeException on failure
.IsNotEqualTo(128); // throws ArgumentException on failure
xml.Requires("xml")
.StartsWith("<data>") // throws ArgumentException on failure
.EndsWith("</data>"); // throws ArgumentException on failure
col.Requires("col")
.IsNotNull() // throws ArgumentNullException on failure
.IsEmpty(); // throws ArgumentException on failure
// Do some work
// Example: Call a method that should not return null
object result = BuildResults(xml, col);
// Check all postconditions:
result.Ensures("result")
.IsOfType(typeof(ICollection)); // throws PostconditionException on failure
return (ICollection)result;
}
Другой хороший подход, который не упакован в библиотеке, но легко может быть, on Paint.Net blog:
public static void Copy<T>(T[] dst, long dstOffset, T[] src, long srcOffset, long length)
{
Validate.Begin()
.IsNotNull(dst, "dst")
.IsNotNull(src, "src")
.Check()
.IsPositive(length)
.IsIndexInRange(dst, dstOffset, "dstOffset")
.IsIndexInRange(dst, dstOffset + length, "dstOffset + length")
.IsIndexInRange(src, srcOffset, "srcOffset")
.IsIndexInRange(src, srcOffset + length, "srcOffset + length")
.Check();
for (int di = dstOffset; di < dstOffset + length; ++di)
dst[di] = src[di - dstOffset + srcOffset];
}
Я использую его в my project и вы могли бы заимствовать код оттуда.
Учитывая, что Microsoft Code Contracts выходит с .NET 4.0, я попытался найти тот, который в основном совместим, если это возможно - и если нет, напишите его сами. Таким образом, при обновлении до .NET 4.0 (в конечном итоге) миграция будет проще.
Существует несколько методов, которые вы можете использовать.
Мое любимое касается Aspect Oriented Programming. Проверьте PostSharp.
Вы также можете посмотреть на SpeC#, это расширение C#
В 4.0, вы будете иметь полнофункциональную библиотеку контракта.
Наконец, мой коллега пришел с довольно полезной защитной библиотекой: http://blueonionsoftware.com/blog.aspx?p=ca49cb62-7ea2-43c5-96aa-91d11774fb48
Я не знаю ни одного, которые являются коммерчески доступными. Существует некоторая поддержка этого типа кода в шаблонах & Практика Enterprise Library. Также есть много проектов с открытым исходным кодом, которые также делают это (в той или иной степени) на CodePlex: http://www.codeplex.com/Project/ProjectDirectory.aspx?ProjectSearchText=validation.
В большинстве случаев эти типы библиотек заканчиваются написанием на заказ и остаются внутри компании, которая их использует.
В .NET 4.0 есть поддержка, обеспечивающая механизмы для этого, используя Code Contracts, которые основаны на SpeC#.
Недавно я написал пост о защитных классах (не найдя какую-либо информации либо): http://ajdotnet.wordpress.com/2009/08/01/posting-guards-guard-classes-explained/
Я также опубликовал реализацию соответствующего класса Guard (не стесняйтесь использовать этот код, как есть, или настроить его на ваш необходимо): ajdotnet.wordpress.com/guard-class/
Что касается отношений между классами Guard и Code Contract в .NET 4.0 (преемник SpeC#), ознакомьтесь со следующим сообщением: www.leading -edge-dev.de/?p=438
(извините за фрагментированные ссылки, сайт разрешил только один ссылка ...)
Е.И.В., AJ.NET
Установите пакет netfx-guard nuget.Вы получаете также фрагменты кода notnull и notempty, и он работает так же быстро, как ваши проверки вручную
- 1. Portable Class Library vs Class Library
- 2. Silverlight 3 class library
- 3. Base Class Library
- 4. Локализации в Class Library
- 5. USB-доступ в .NET Portable Class Library
- 6. .NET Portable Class Library [Serializable] Attribute
- 7. C# HTML Class Library?
- 8. Class Library in C#
- 9. Portable Class Library Reflection
- 10. DLL Library class
- 11. Class Library System.IO.File
- 12. Portable Class Library vs. library project
- 13. ASP.net mvc shared Class Library
- 14. Portable Class Library System.Object error
- 15. .net core classlibrary call .net framework class library
- 16. Entity Framework & Portable Class Library
- 17. Portable Class Library + XDocument.Load (uri)?
- 18. C# Class Library - Как отлаживать
- 19. Portable Class Library Reflection GetField
- 20. ASP.NET VNext Class Library System.Runtime.Serialization
- 21. C# Class Library Exception Handling
- 22. asp.net load file class library
- 23. Ms Word 12.0 Class Library
- 24. Library and Book Class, Contructor
- 25. StreamReader и Portable Class Library
- 26. VS2008 Smart Design Class Library Template
- 27. C# Class Library не регистрируется для COM
- 28. List.Exists отсутствует в Portable Class Library
- 29. Portable Class Library и .NET Framework 4.6.x
- 30. .net Portable Class Library содержит Microsoft.VisualBasic как зависимость
Я отмечаю это как принятый ответ, потому что он, безусловно, соответствует моим потребностям. – 2011-04-21 03:42:00