PowerUp هي مكتبة أساليب التمديد لـ .NET Core ، وهي تضيف وظائف مفيدة إلى الإطار.
powerupcore nuget
powerupcore azure nuget
⏩ خفيفة الوزن: الهدف ليس يحتوي على 5K طرق ، ولكن فقط يكون لديك طرق مفيدة اليومية فقط (في رأيي)
.NET CORE متوافق
وحدة تم اختبارها
موثق 100 ٪
يتم شرح جميع طريقة التمديد ويتم توفير سبب وجوده في الوثائق التالية.
تبسيط بناء الجملة اللازم للتحقق من Wehather محتوى السلسلة هو inter أو لا.
لماذا؟
لإزالة التعليمات البرمجية المتكررة
if ( "42" . IsInteger ( ) )
Foo ( ) ; يزيل من سلسلة محتوى سلسلة المعلمة.
لماذا؟
لإزالة التعليمات البرمجية المتكررة
"My text" . Remove ( "My" ) // result: " text"
// instead of
"My text" . Replace ( "My" , string . Empty ) ; // result: " text"
Foo ( ) ; يعطي بناء جملة أقصر لتنسيق طريقة السلسلة.
لماذا؟
لجعل الكود أقصر
// .net syntax
string . Format ( "Debug Level: {0} " {1} " {3}" , DebugLevel . Info , "Everything is awesome!" , DateTime . Now ) ;
// PowerUp syntax
"Debug Level: {0} " {1} " {3}" . Format ( DebugLevel . Info , "Everything is awesome!" , DateTime . Now ) ; يسمح بسهولة تحويل tring إلى التعداد.
لماذا؟
لإزالة التعليمات البرمجية المتكررة
private enum TestEnum
{
Val1 ,
Val2 ,
Val3
}
var enumVar = "Val1" . ToEnum < TestEnum > ( ) ; يسمح بالحصول على الوصف القابل للقراءة لقيمة التعداد.
private enum TestEnum
{
[ Description ( "Value with description" ) ]
ValWithDesc = 1 ,
ValNoDesc = 2 ,
AnotherNoDesc = 3
}
var testObject = TestEnum . ValWithDesc ;
string description = testObject . GetDescription ( ) ; يساعد على إزالة المزيد من العناصر مرة واحدة من مجموعة.
لماذا؟
لتوفير ميزات إضافة مفيدة للمجموعات
sourceList . RemoveRange ( deleteList ) ;ينفذ نسخة عميقة frim مجموعة من الكائنات iclonable .
var testList = _fixture . Create < List < clonableObj > > ( ) ;
var clone = testList . Clone ( ) ;
clone . First ( ) != testList . First ( ) يحصل على آخر فهرس للمجموعة.
لماذا؟
لإزالة التعليمات البرمجية المتكررة
sourceList . GetLastIndex ( ) == ( sourceList . Count - 1 ) يلقي engumentnullexception إذا كانت الوسيطة المعطاة لاغية.
لماذا؟
لاستبدال Guard.ArgumentNotnull في .NET Core
objectShouldNotBeNUll . ThrowIfNull ( nameof ( objectShouldNotBeNUll ) ) ;
// Inspired on Microsoft.Practices.EnterpriseLibrary.Common.Utility
Guard . ArgumentNotNull ( objectShouldNotBeNUll , nameof ( objectShouldNotBeNUll ) ) ; تحقق من أن الكائن لاغري أو لا فار.
لماذا؟
لجعل بناء الجملة للتحقق من منظف فارغ وأكثر قابلية للقراءة البشرية
var someObject = new object ( ) ;
//Before
if ( someObject != null )
Foo ( ) ;
//PowerUp
if ( someObject . isNull ( ) )
Foo ( ) ; تحقق من أن قيمة الكائن بين الحد الأدنى والأعلى.
لماذا؟
لتبسيط بناء الجملة للتحقق من أن قيمة onBeject تكون بين نطاق معين
if ( 5 . Between ( 2 , 8 ) )
Foo ( ) ;
if ( 7 . Between ( 7 , 12 , BetweenOptions . Inclusive ) )
Foo ( ) ; يسمح ببساطة بتسجيل المعلومات حول طريقة الاتصال.
لماذا؟
لتجنب الرمز الممل ، ونسخ مشكلة اللصق ، فإن السيناريو tipical هو في بداية طريقة وحدة التحكم مثل:
[ HttpPut ]
[ Route ( "[action]" ) ]
[ Produces ( "application/json" ) ]
[ ProducesResponseType ( typeof ( Product ) , StatusCodes . Status201Created ) ]
[ ProducesResponseType ( typeof ( string ) , StatusCodes . Status400BadRequest ) ]
public async Task < IActionResult > AddProduct ( [ FromBody ] NewProduct newProduct )
{
_logger . LogDebug ( $ " { DateTime . UtcNow : dd/MMM/yyyy } | 32: CatalogController.AddProduct()}" ) ;
if ( ! ModelState . IsValid )
return BadRequest ( ModelState ) ;
....يمكن الآن أن تكون طريقة التسجيل ببساطة:
.. .
public async Task < IActionResult > AddProduct ( [ FromBody ] NewProduct newProduct )
{
_logger . LogThisMethod ( ) ;
.. .من السهل من المثال لمعرفة مقدار ما يمكن أن يقلل من ذخيرة الكود وإمكانية الأخطاء
يتم استخدام مفاتيح الوصول إلى التخزين في Azure في المصادقة للوصول إلى حساب التخزين.
عندما تقوم بإنشاء حساب تخزين ، يتم تزويدك بمفاتيح الوصول إلى التخزين ، أي مفاتيح الوصول الأساسية والثانوية.
شاهد المزيد من https://blogs.msdn.microsoft.com/mast/2013/11/06/why-does-an-azure-storage-account-have-two-access-keys/
لماذا؟
يتيح لك المتكرر الاتصال بشكل متكرر باستخدام المفتاح الأساسي أو التبديل تلقائيًا إلى يوم Seconday.
< add key = " QueueConnectionString1 " value = " DefaultEndpointsProtocol=https;AccountName=weu########## " />
< add key = " QueueConnectionString2 " value = " DefaultEndpointsProtocol=https;AccountName=weu########## " />
< add key = " QueueReference " value = " myQueueReference " /> var storageAccount = CloudStorageAccountHelper . RedundantParse (
CloudConfigurationManager . GetSetting ( "QueueConnectionString1" ) ,
CloudConfigurationManager . GetSetting ( "QueueConnectionString2" ) ) ;
var queueClient = storageAccount . CreateCloudQueueClient ( ) ;
var myQueue = queueClient . GetQueueReference ( ConfigurationManager . AppSettings [ "QueueReference" ] ) ;