پروایدر اوراکل برای ASP.NET Identity
- خصیصههای ثابت: یعنی همه کاراکترهای A دارای یک شکل مشخص هستند. در واقع مشخصات ذاتی آبجکت میباشند.
- خصیصههای پویا: یعنی هر کاراکتر دارای فونت، سایز و رنگ خاص خود است. در واقع خصیصههایی که از یک آبجکت به آبجکت دیگر متفاوت هستند .
public interface IAlphabet { void Render(string font);//Define Extrinsic and non-static states for each object } public class A : IAlphabet { public void Render(string font) { Console.WriteLine(GetType().Name + " has font of type " + font); } } public class B : IAlphabet { public void Render(string font) { Console.WriteLine(GetType().Name + " has font of type " + font); } }
public class FlyWeightFactory { private readonly Dictionary<string, IAlphabet> _dictionary = new Dictionary<string, IAlphabet>(); public int Count { get { return _dictionary.Count; } } public IAlphabet GetObject(string name) { if (!_dictionary.ContainsKey(name)) switch (name) { case "A": _dictionary.Add(name, new A()); Console.WriteLine("New object created"); break; case "B": _dictionary.Add(name, new B()); Console.WriteLine("New object created"); break; default: throw new Exception("Factory can not create given object"); } else Console.WriteLine("Object reused"); return _dictionary[name]; } }
FlyWeightFactory flyWeightFactory = new FlyWeightFactory(); IAlphabet alphabet = flyWeightFactory.GetObject(typeof(A).Name); alphabet.Render("Arial"); Console.WriteLine(); alphabet = flyWeightFactory.GetObject(typeof(B).Name); alphabet.Render("Tahoma"); Console.WriteLine(); alphabet = flyWeightFactory.GetObject(typeof(A).Name); alphabet.Render("Time is New Roman"); Console.WriteLine(); alphabet = flyWeightFactory.GetObject(typeof(A).Name); alphabet.Render("B Nazanin"); Console.WriteLine(); Console.WriteLine("Total new alphabet count:" + flyWeightFactory.Count);
نکتهی قابل توجه این است که این الگو بصورت داخلی از الگوی Factory Method استفاده میکند. با توجه بیشتر به پیاده سازی Flyweight Factory شباهت هایی بین آن و Singleton Pattern میبینیم. کلاسهایی از این دست را Multiton می نامند. در Multiton نمونهها بصورت زوج کلیدهایی نگهداری میشوند و بر اساس Key دریافت شده نمونهی متناظر بازگردانده میشود. همچنین در Singleton تضمین میشود که از کلاس مربوطه فقط یک نمونه در کل Application وجود دارد. در Multiton Pattern تضمین میشود که برای هر Key تنها یک Instance وجود دارد.
Rust – the Ultimate Programming Language?
What makes a good programming language? Syntax? Compiler? Tools and ecosystem? It is tempting to say “all of that” but in that case, why there are so many different programming languages? All these components are very important but they alone can’t make the language “good”. One of essential things is the purpose — like languages for rapid development, or development of distributed algorithms, or general purpose for high-level and low-level applications, or easy to learn, or safe to use and so on.
آموزش 9 ساعته ASP.NET Core MVC
Learn ASP.NET Core MVC (.NET 8) - The Complete Guide
In this Complete Guide course, we will learn MVC (Model-View-Controller) with .NET 8.
When we are working with .NET Core Web Applications, there are two common ways of building website.
1. MVC (Model-View-Controller) Web Application
2. Razor Pages Web Application
In this course we will learn the basics of .NET Core (.NET 8) and then learn basics of MVC and Razor Pages as we enhance MVC Application to a more complex final project!.
Topics Covered
- Fundamentals of .NET Core
- MVC Application
- Razor Pages
- Entity Framework Core
- Repository Pattern
- ViewBag
- ViewData
- TempData
- Taostr and sweet alerts in .NET Core
- Datatables in .NET Core
- Assignments
- Errors and how to solve them!
کتابخانه TimezZ
Fast timer plugin for countdown and count forward Demo
With this plugin you can easily put a timer on your site, it works both ways. You can use two version, one version is the version for modern browsers with the standards of the ES2017 and the version for old browsers with ES2015 standards. Using the config you can change the tags as letters and numbers, you can also change the text output next to the numbers.
مستند سازی ASP.NET Core 2x API توسط OpenAPI Swagger - قسمت ششم - تکمیل مستندات محافظت از API
using System.Security.Claims; using System.Text; using System.Text.Encodings.Web; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Abstractions; using Microsoft.AspNetCore.Mvc.Formatters; using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.Extensions.Options; namespace OpenAPISwaggerDoc.Web.Authentication; public class BasicAuthenticationHandler : AuthenticationHandler<AuthenticationSchemeOptions> { private string _failReason; public BasicAuthenticationHandler( IOptionsMonitor<AuthenticationSchemeOptions> options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock) { } protected override Task<AuthenticateResult> HandleAuthenticateAsync() { if (!Request.Headers.ContainsKey("Authorization")) { _failReason = "Missing Authorization header"; return Task.FromResult(AuthenticateResult.Fail(_failReason)); } try { var authenticationHeader = AuthenticationHeaderValue.Parse(Request.Headers["Authorization"]); var credentialBytes = Convert.FromBase64String(authenticationHeader.Parameter); var credentials = Encoding.UTF8.GetString(credentialBytes).Split(':'); var username = credentials[0]; var password = credentials[1]; if (string.Equals(username, "DNT", StringComparison.Ordinal) && string.Equals(password, "123", StringComparison.Ordinal)) { var claims = new[] { new Claim(ClaimTypes.NameIdentifier, username) }; var identity = new ClaimsIdentity(claims, Scheme.Name); var principal = new ClaimsPrincipal(identity); var ticket = new AuthenticationTicket(principal, Scheme.Name); return Task.FromResult(AuthenticateResult.Success(ticket)); } _failReason = "Invalid username or password"; return Task.FromResult(AuthenticateResult.Fail(_failReason)); } catch { _failReason = "Invalid Authorization header"; return Task.FromResult(AuthenticateResult.Fail(_failReason)); } } protected override async Task HandleChallengeAsync(AuthenticationProperties properties) { await base.HandleChallengeAsync(properties); if (Response.StatusCode == StatusCodes.Status401Unauthorized && !string.IsNullOrWhiteSpace(_failReason)) { Response.Headers.Add("WWW-Authenticate", _failReason); Response.ContentType = "application/json"; await WriteProblemDetailsAsync(_failReason); } } private Task WriteProblemDetailsAsync(string detail) { var problemDetails = new ProblemDetails { Detail = detail, Status = Context.Response.StatusCode }; var result = new ObjectResult(problemDetails) { ContentTypes = new MediaTypeCollection(), StatusCode = problemDetails.Status, DeclaredType = problemDetails.GetType(), }; var executor = Context.RequestServices.GetRequiredService<IActionResultExecutor<ObjectResult>>(); var routeData = Context.GetRouteData() ?? new RouteData(); var actionContext = new ActionContext(Context, routeData, new ActionDescriptor()); return executor.ExecuteAsync(actionContext, result); } }
معرفی NET MAUI Preview 4.
Today we are pleased to announce the availability of .NET Multi-platform App UI (.NET MAUI) Preview 4. Each preview introduces more controls and features to this multi-platform toolkit on our way to general availability this November at .NET Conf. .NET MAUI now has enough building blocks to build functional applications for all supported platforms, new capabilities to support running Blazor on the desktop, and exciting progress in Visual Studio to support .NET MAUI.
6.Visual Studio 2017 15.7 منتشر شد
This release contains the following improvements and enhancements:
- This release now installs Java™ Development Kit 8, Update 181 (JDK version 8u181).
These are the customer-reported issues addressed in 15.7.6:
- Visual C++ Redistributable 2017 does not report the install state in a specific registry location.
- In 15.7 users may see extensions load without all of their assets and cause VS to crash. This has been addressed for 15.7.6.
- Visual Studio 2017 version 15.7.5 crashes when opening a solution.