اشتراکها
پیاده سازی Product Comparison Layout
A basic responsive product grid layout with comparison functionality and a slide-in effect. Demo
نظرات مطالب
نمایش ساختارهای درختی توسط jqGrid
- مراجعه کنید به مجموعه مثالهای آن در اینجا. مواردی مانند «Functionality -> Add tree node» در آن مستند شدهاند.
- یک مثال دیگر در اینجا
- مجموعه پرسش و پاسخهای stack overflow هم در این زمینه مفید است.
- یک مثال دیگر در اینجا
- مجموعه پرسش و پاسخهای stack overflow هم در این زمینه مفید است.
نظرات مطالب
نوشتن Middleware سفارشی در ASP.NET Core
یک نکتهی تکمیلی: انتقال کدهای IHttpModuleها به میان افزارها
معادل BeginRequest و EndRequest در ماژولهای نگارشهای پیشین ASP.NET:
دقیقا مکانهای پیش و پس از فراخوانی await _next در میان افزارها هستند:
معادل BeginRequest و EndRequest در ماژولهای نگارشهای پیشین ASP.NET:
namespace MyApp.Modules { public class MyModule : IHttpModule { public void Dispose() { } public void Init(HttpApplication application) { application.BeginRequest += (new EventHandler(this.Application_BeginRequest)); application.EndRequest += (new EventHandler(this.Application_EndRequest)); } private void Application_BeginRequest(Object source, EventArgs e) { HttpContext context = ((HttpApplication)source).Context; // Do something with context near the beginning of request processing. } private void Application_EndRequest(Object source, EventArgs e) { HttpContext context = ((HttpApplication)source).Context; // Do something with context near the end of request processing. } } }
public class EndRequestMiddleware { private readonly RequestDelegate _next; public EndRequestMiddleware(RequestDelegate next) { _next = next; } public async Task Invoke(HttpContext context) { // Do tasks before other middleware here, aka 'BeginRequest' // ... // Let the middleware pipeline run await _next(context); // Do tasks after middleware here, aka 'EndRequest' // ... } }
Professional REST API design with ASP.NET Core and WebAPI
This project is an example of lightweight and extensible infrastructure for building RESTful Web API with ASP.NET Core.
This example contains a number of tricks and techniques which I've learned while building APIs in ASP.NET Core.
Techniques and Features
- JWT Authentication
- Secure JWT using Encryption (JWE)
- Logging to File, Console and Database using Elmah & NLog
- Logging to sentry.io (Log Management System)
- Exception Handling using Custom Middleware
- Automatic Validation
- Standard API Resulting
- Dependency Injection using Autofac
- Map resources using AutoMapper
- Async/Await Best Practices
- Versioning Management
- Using Swagger (Swashbuckle)
- Auto Document Generator for Swagger
- Integrate Swagger and Versioning
- Integrate Swagger and JWT/OAuth Authentication
- Best Practices for Performance and Security
نظرات مطالب
پردازشهای Async در Entity framework 6
طبق گفته شما، چون استفاده از اعمال async، ترد جدیدی ایجاد نمی کند، چه زمان باید از thread ها و چه زمانی بهتر است از اعمال async استفاده کنیم؟ آیا با توجه به سربار کمتر async بهتر نیست همیشه به عنوان جایگزینی برای thread ها از اون ها استفاده کرد؟ و مسئله دوم اینکه متدهایی مانند Task.Run که تقلبی هستند، برای چه منظوری ارائه شده اند؟
همانطور که در مقاله «آغاز کار با الکترون» گفتیم، فرآیند اصلی، تنها فرآیندی است که توانایی استفاده از گرافیک بومی
سیستم عامل را دارد. ولی بسیاری از اوقات نیاز است در سمت renderProcess
توانایی انجام این کارها را داشته باشیم. در این مقاله قصد داریم که همان
دیالوگهای open و save را از طریق Render Process اجرا نماییم.
الکترون برای اینکار از یک ماژول به نام remote استفاده میکند که وظیفه آن برقراری ارتباط IPC از Render Process به Main Process است و مواردی را که لازم است، در اختیار شما قرار میدهد. در این شیوه لازم نیست شما مرتبا به ارسال پیام بپردازید، بلکه این ارتباطات را ماژول remote فراهم میکند. این مورد شبیه به سیستم RMI در جاواست.
برای استفاده از remote در فایل html، کدهای زیر را در تگ اسکریپت اضافه میکنیم:
اینبار هم مانند قسمت قبلی، کدها را به شیوه دیگری انتساب دادیم. قصد ما از
تغییر این رویه این است که با انواع حالتهای انتساب اشیاء، آشنا شویم. بعد
از آن توابع زیر را اضافه میکنیم:
برای استفاده از این توابع، کدهای زیر را نیز به فایل اضافه میکنیم تا دکمههای open و save به صفحه اضافه شوند:
حالا برنامه را اجرا و تست کنید.
عبارت remote شامل متدهای فراوانی است که تعدادی از آنها را بر میشماریم:
شیء BrowserWindow صفحه جاری را باز میگرداند.
شیء webContents صفحه جاری را باز میگرداند.
این متد، دسترسی به شیء global را داراست و یکی از اشیاء ارتباطی بین Main
Process و RenderProcess است که میتواند هر نوع دادهای را جابجا نماید.
برای مشاهده بهتر از نحوه کارکرد این متد کد زیر را مشاهده نمایید:
Main Process
Render Process
از این پس هر موقع renderProcess به این کد برسد، پیام 1395 را روی صفحه نمایش خواهد داد.
شیء، process را از main process دریافت میکند و با کد زیر برابر است. ولی مزیت این متد این است که از کش نیز استفاده مینماید.
در مورد شیء process باید گفت که شامل خصوصیات و متدهایی در مورد پروسه اصلی اپلیکیشن میباشد. این اطلاعات مثل دریافت شماره نسخه الکترون، شماره نسخه کرومیوم، دریافت اطلاعات حافظه در مورد پروسه اپلیکیشن و حتی دریافت اطلاعات حافظه در مورد کل سیستم و ... میشود.
الکترون برای اینکار از یک ماژول به نام remote استفاده میکند که وظیفه آن برقراری ارتباط IPC از Render Process به Main Process است و مواردی را که لازم است، در اختیار شما قرار میدهد. در این شیوه لازم نیست شما مرتبا به ارسال پیام بپردازید، بلکه این ارتباطات را ماژول remote فراهم میکند. این مورد شبیه به سیستم RMI در جاواست.
برای استفاده از remote در فایل html، کدهای زیر را در تگ اسکریپت اضافه میکنیم:
const remote=require("electron").remote; const dialog=remote.dialog;
function OpenDialog() { dialog.showOpenDialog({ title:'باز کردن فایل متنی', properties: [ 'openFile']//[ 'openFile', 'openDirectory', 'multiSelections' ] ,filters:[ {name:'فایلهای نوشتاری' , extensions:['txt','text']}, {name:'جهت تست' , extensions:['doc','docx']} ] }, (filename)=>{ if(filename===undefined) return; var content= fs.readFileSync(String(filename),'utf8'); document.getElementById("TextFile").value=content; }); } function SaveDialog() { dialog.showSaveDialog({ title:'باز کردن فایل متنی', properties: [ 'openFile']//[ 'openFile', 'openDirectory', 'multiSelections' ] ,filters:[ {name:'فایلهای نوشتاری' , extensions:['txt','text']} ] }, (filename)=>{ if(filename===undefined) return; var content=document.getElementById("TextFile").value; fs.writeFileSync(String(filename),content,'utf8'); }); }
<button onclick="OpenDialog();" > Open File</button> <button onclick="SaveDialog();" > Save File</button>
عبارت remote شامل متدهای فراوانی است که تعدادی از آنها را بر میشماریم:
remote.getCurrentWindow()
remote.getCurrentWebContents()
remote.getGlobal(name)
Main Process
global.testData={year:1395};
Render Process
alert(remote.getGlobal("testData").year);
remote.process
remote.getGlobal('process')
در مورد شیء process باید گفت که شامل خصوصیات و متدهایی در مورد پروسه اصلی اپلیکیشن میباشد. این اطلاعات مثل دریافت شماره نسخه الکترون، شماره نسخه کرومیوم، دریافت اطلاعات حافظه در مورد پروسه اپلیکیشن و حتی دریافت اطلاعات حافظه در مورد کل سیستم و ... میشود.