Issues Fixed in 15.9.19
- Fixed an issue in C++ optimizer where the impact of writing to unknown memory inside a call wasn’t properly accounted for in the caller.
app.Use(async (httpContext, next) => { //Get username var username = httpContext.User.Identity.IsAuthenticated ? httpContext.User.Identity.Name : "anonymous"; using (LogContext.PushProperty("User", username)) { //Get remote IP address var ip = httpContext.Connection.RemoteIpAddress.ToString(); using (LogContext.PushProperty("IP", !String.IsNullOrWhiteSpace(ip) ? ip : "unknown")) { await next.Invoke(); } } });
با عرض سلام و خسته نباشید من با اجرای برنامه با خطای زیر مواجه میشم (ویندوز 7 و دات نت فریمورک 4 رو هم نصب کردم) :
و همینطور در زمانی که برنامه را در ویژوال استودیو اجرا میکنم خطای زیر را میدهد:
Unknown build error, 'Could not load file or assembly 'file:///C:\Users\VAHID\Downloads\DNTProfiler-1.8.1129.0\DNTProfiler-1.8.1129.0\DNTProfiler\obj\Release\DNTProfiler.exe' or one of its dependencies. The module was expected to contain an assembly manifest.'
open the Postman -> click on the Import button -> select the Raw text tab -> paste the curl script here -> then press the Continue button -> at the end press the button import.
httpClient.GenerateCurlInConsole(httpRequestMessage, null);
httpClient.GenerateCurlInConsole( httpRequestMessage, configs => { configs.TurnOn = true; configs.NeedAddDefaultHeaders = true; configs.EnableCodeBeautification = false; });
httpClient.GenerateCurlInFile(httpRequestMessage, null);
httpClient.GenerateCurlInFile( httpRequestMessage, configs => { configs.Filename = "your filename"; configs.Path = "your path"; configs.TurnOn = true; configs.NeedAddDefaultHeaders = true; });
httpClient.GenerateCurlInString(httpRequestMessage);
خوشحال میشوم اگه نظری دارید راجع به پروژه و یا مشکلی دیدید در سورس کد به من اطلاع بدهید و خیلی خوشحال میشوم اگر در تکمیل و پیاده سازی این پروژه مشارکت کنید و اگر این پروژه براتون جذاب و یا مفید بود استار بدهید.
using Microsoft.ML.Data; namespace CreditCardFraudDetection.DataModels { public class ModelInput { [ColumnName("Time"), LoadColumn(0)] public float Time { get; set; } [ColumnName("V1"), LoadColumn(1)] public float V1 { get; set; } [ColumnName("V2"), LoadColumn(2)] public float V2 { get; set; } [ColumnName("V3"), LoadColumn(3)] public float V3 { get; set; } [ColumnName("V4"), LoadColumn(4)] public float V4 { get; set; } [ColumnName("V5"), LoadColumn(5)] public float V5 { get; set; } [ColumnName("V6"), LoadColumn(6)] public float V6 { get; set; } [ColumnName("V7"), LoadColumn(7)] public float V7 { get; set; } [ColumnName("V8"), LoadColumn(8)] public float V8 { get; set; } [ColumnName("V9"), LoadColumn(9)] public float V9 { get; set; } [ColumnName("V10"), LoadColumn(10)] public float V10 { get; set; } [ColumnName("V11"), LoadColumn(11)] public float V11 { get; set; } [ColumnName("V12"), LoadColumn(12)] public float V12 { get; set; } [ColumnName("V13"), LoadColumn(13)] public float V13 { get; set; } [ColumnName("V14"), LoadColumn(14)] public float V14 { get; set; } [ColumnName("V15"), LoadColumn(15)] public float V15 { get; set; } [ColumnName("V16"), LoadColumn(16)] public float V16 { get; set; } [ColumnName("V17"), LoadColumn(17)] public float V17 { get; set; } [ColumnName("V18"), LoadColumn(18)] public float V18 { get; set; } [ColumnName("V19"), LoadColumn(19)] public float V19 { get; set; } [ColumnName("V20"), LoadColumn(20)] public float V20 { get; set; } [ColumnName("V21"), LoadColumn(21)] public float V21 { get; set; } [ColumnName("V22"), LoadColumn(22)] public float V22 { get; set; } [ColumnName("V23"), LoadColumn(23)] public float V23 { get; set; } [ColumnName("V24"), LoadColumn(24)] public float V24 { get; set; } [ColumnName("V25"), LoadColumn(25)] public float V25 { get; set; } [ColumnName("V26"), LoadColumn(26)] public float V26 { get; set; } [ColumnName("V27"), LoadColumn(27)] public float V27 { get; set; } [ColumnName("V28"), LoadColumn(28)] public float V28 { get; set; } [ColumnName("Amount"), LoadColumn(29)] public float Amount { get; set; } [ColumnName("Class"), LoadColumn(30)] public bool Class { get; set; } } }
using Microsoft.ML.Data; namespace CreditCardFraudDetection.DataModels { public class ModelOutput { [ColumnName("PredictedLabel")] public bool Prediction { get; set; } public float Score { get; set; } } }
IDataView trainingDataView = mlContext.Data.LoadFromTextFile<ModelInput>( path: dataFilePath, hasHeader: true, separatorChar: ',', allowQuoting: true, allowSparse: false);
var dataProcessPipeline = mlContext.Transforms.Concatenate("Features", new[] { "Time", "V1", "V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9", "V10", "V11", "V12", "V13", "V14", "V15", "V16", "V17", "V18", "V19", "V20", "V21", "V22", "V23", "V24", "V25", "V26", "V27", "V28", "Amount" });
// Choosing algorithm var trainer = mlContext.BinaryClassification.Trainers.LightGbm(labelColumnName: "Class", featureColumnName: "Features"); // Appending algorithm to pipeline var trainingPipeline = dataProcessPipeline.Append(trainer);
ITransformer model = trainingPipeline.Fit(trainingDataView);mlContext.Model.Save(model , trainingDataView.Schema, <path>);
var crossValidationResults = mlContext.BinaryClassification.CrossValidateNonCalibrated(trainingDataView, trainingPipeline, numberOfFolds: 5, labelColumnName: "Class");
var predEngine = mlContext.Model.CreatePredictionEngine<ModelInput, ModelOutput>(mlModel); ModelInput sampleData = new ModelInput() { time = 0, V1 = -1.3598071336738, ... }; ModelOutput predictionResult = predEngine.Predict(sampleData); Console.WriteLine($"Actual value: {sampleData.Class} | Predicted value: {predictionResult.Prediction}");
private ITransformer SetupMlnetModel(string tensorFlowModelFilePath) { var pipeline = _mlContext.<preprocess-data> .Append(_mlContext.Model.LoadTensorFlowModel(tensorFlowModelFilePath) .ScoreTensorFlowModel( outputColumnNames: new[]{TensorFlowModelSettings.outputTensorName }, inputColumnNames: new[] { TensorFlowModelSettings.inputTensorName }, addBatchDimensionInput: false)); ITransformer mlModel = pipeline.Fit(CreateEmptyDataView()); return mlModel; }
claims.Add(new Claim(UserClaimTypes.PackedPermission, new[] {"48", "65", "6C", "6C", "6F", "20", "57", "6F", "72", "6C", "64", "21"} .PackPermissionsToString()));
مزایای Interface ها چیست ؟
در حالت عادی ارث بری از چند کلاس به طور هم زمان امکان پذیر نیست ولی Interfaceها این مزیت را دارند که به هر تعداد که لازم است، کلاسهای مشتق شده از آنها ارث بری کنند. این موضوع یکی از مهمترین مزایای Interface میباشد. هم چنین با استفاده از Interfaceها کدها قابلیت بهتری در نگهداری، انعطاف پذیری و استفاده مجدد پیدا میکنند.
Abstract Class چیست ؟
کلاس Abstract، یکی از ابزارهای مهم OOP میباشد که نمیتوان از آنها نمونهای ساخت. به عبارتی دیگر نمیتوانیم متغیری از کلاس Abstract تعریف کنیم. یک کلاس Abstract شبیه Interface میباشد ولی با دیدی وسیعتر. این کلاسها میتواند دارای متدهای Abstract باشند که شبیه Interface فقط اعلام میشوند و باید در کلاسهای مشتق شده بازنویسی شوند. البته میتوان در این کلاسها متدهایی داشت که Abstract نیستند و احتیاجی به پیاده سازی آنها در کلاسهای مشتق شده ندارند.
باید توجه داشت که تنها متدهایی از کلاس abstract الزام به پیاده سازی دارند که صریحا کلمهی abstract در تعریف آن متد ذکر شده باشد.
در واقع همین متدها هم الزامی به پیاده سازی ندارند. یعنی میشود در subclass هم به صورت abstract ذکر شوند. البته به شرطی که subclass هم به صورت abstract تعریف شده باشد.
در ضمن کلاس abstract میتواند متدهای ساده یا غیر abstract هم داشته باشد. همانطور که میدانید متدهای غیر abstract باید بدنه داشته باشند و نیازی به پیاده سازی ندارند.
پس کلاس abstract هم میتواند متدهایی داشته باشد که باید پیاده سازی شوند و هم متدهایی داشته باشد که لازم نباشد پیاده سازی شوند.
با توجه به تعاریف ذکر شده کلاس Abstract حالتی بین کلاسهای معمولی و Interfaceها میباشد و کلاسی میباشد که غیر قطعی و ناتمام است که باید در سطح فرزندانش تکمیل شود .
مزایای کلاسهای Abstract چیست ؟
یکی از مزیتهای کلاس Abstract فراهم نمودن کلاسی پایه برای دیگر کلاسهای مشتق شده است؛ با این توضیح که متدهای آن میتوانند کد نویسی شده باشند یا خیر. از طرفی پیاده سازی تمام متدهای Abstract در کلاس مشتق شده اجباری نیست (برخلاف Interface).
تعریف سطوح دسترسی برای متدها و خصوصیتها مانند کلاسهای معمولی نیز یکی دیگر از مزیتهای این کلاسها است.
تفاوت بین کلاسهای Abstract و Interface
1- یک کلاس معمولی تنها میتواند از یک کلاس Abstract ارث بری کند ولی همان کلاس میتواند از چندین Interface ارث ببرد.
2- یک Interface فقط میتواند اعلان متدها و خصوصیتها را داشته باشد؛ اما یک کلاس Abstract علاوه بر آنها میتوانید متدها و خصوصیتهایی با کدهای کامل داشته باشد.
3- عناصر موجود در کلاس Abstract میتوانند مانند یک کلاس معمولی دارای سطح دسترسی باشند؛ ولی Interfaceها فاقد این امکان هستند.
4- وقتی شما متدی را به کلاس Abstract اضافه میکنید، به طور خودکار به همه زیر کلاسها اعمال میشود؛ اما در Interface اگر متدی اضافه کنید باید در تمام زیر کلاسها آن را اعمال کنید .
5- کلاسهای Abstract مانند کلاسهای معمولی میتوانند دارای فیلد و عناصر دیگری (مثل ثابتها) باشند؛ در حالیکه یک Interface فاقد این امکان میباشد. همچنین کلاس abstract میتواند شامل سازنده باشد، اما اینترفیس نمیتواند.
6- Abstract یکی از انواع کلاس است؛ ولی Interface کلاس نیست .
7- اینترفیس تنها میتواند از اینترفیس ارث بری کند اما کلاس abstract میتواند از اینترفیس، کلاس Abstract و یا سایر کلاسها ارث بری کند.
چه زمانی از Interface ها و یا کلاسهای Abstract استفاده کنیم؟
- با توجه به توضیحات ذکر شده مواقعی که نیاز به وراثت چند گانه داریم، باید از Interface استفاده کنیم؛ به دلیل اینکه این امکان در کلاسهای Abstract وجود ندارد.
- زمانی که بخواهیم تمام متدهای معرفی شده در کلاس پایه به طور کامل در کلاس مشتق شده پیاده شوند باید از Interface استفاده کنیم.
- وقتی در پروژههای بزرگ با تغییرات زیادی مواجه هستیم، استفاده از کلاس Abstract توصیه میشود؛ چون با تغییر آن به طور خودکار تغییرات در کلاسهای مشتق شده اعمال میشوند.
- با توجه به اینکه به غیر از اعلان متدها و خصوصیتها امکان تعریف عناصر دیگری در Interfaceها وجود ندارد، در صورتیکه ملزم به استفاده از این عناصر باشیم، استفاده از کلاسهای Abstract ضروری میباشد.
- در صورتی که نخواهیم کلیه متدها در کلاسهای مشتق شده پیاده سازی شوند و تعدادی از آنها را در کلاس پدر کدنویسی کنیم، باید از کلاس Abstract استفاده کنیم.- به طور کلی یک Interface چارچوب و قابلیتهای یک کلاس را مشخص میکند و یک قرارداد است؛ ولی کلاس Abstract نوع کلاس را معین میکند. این تفاوت کمک بسیاری برای تشخیص زمان استفاده از این دو را به برنامه نویسان میدهد.
public bool IsValidIranianLegalCode(string input) { //input has 11 digits that all of them are not equal if (!Regex.IsMatch(input, @"^(?!(\d)\1{10})\d{11}$")) return false; var check = Convert.ToInt32(input.Substring(10, 1)); int dec = Convert.ToInt32(input.Substring(9, 1)) + 2; int[] Coef = new int[10] { 29, 27, 23, 19, 17, 29, 27, 23, 19, 17 }; var sum = Enumerable.Range(0, 10) .Select(x => (Convert.ToInt32(input.Substring(x, 1)) + dec) * Coef[x]) .Sum() % 11; return sum == check; }
namespace System { public interface IServiceProvider { object GetService(Type serviceType); } }
using System; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; namespace CoreIocServices { public interface IProductService { void Delete(int id); } public class ProductService : IProductService { private readonly ITestService _testService; private readonly ILogger<ProductService> _logger; public ProductService(IServiceProvider serviceProvider) { _testService = serviceProvider.GetRequiredService<ITestService>(); _logger = serviceProvider.GetService<ILogger<ProductService>>() ?? NullLogger<ProductService>.Instance; } public void Delete(int id) { _testService.Run(); _logger.LogInformation($"Deleted a product with id = {id}"); } } }
namespace Microsoft.Extensions.DependencyInjection { public static class ServiceProviderServiceExtensions { public static T GetRequiredService<T>(this IServiceProvider provider); public static T GetService<T>(this IServiceProvider provider); } }