iw.algerianembassy-kuwait.com Open in urlscan Pro
2606:4700:3031::ac43:d844  Public Scan

URL: https://iw.algerianembassy-kuwait.com/460222-startup-cs-in-a-self-RYBJCA
Submission: On June 01 via manual from IL — Scanned from DE

Form analysis 0 forms found in the DOM

Text Content

Algerianembassy-kuwait
 * העברת גישה לחשבון שורש AWS כאשר MFA מופעל
 * כיצד אוכל לשחק קובץ m3u באנדרואיד?
 * ליצור ולהתחיל שירות Windows 7 או 10 באמצעות קובץ אצווה?


Advertisement


Toggle navigation
 * HOW
 * JAVASCRIPT
 * PYTHON
 * JAVA
 * ANDROID
 * HTML

 1. כדי הראשי
 2. 
 3. Startup.cs ביישום .NET Core Console שמתארח בעצמו


STARTUP.CS ביישום .NET CORE CONSOLE שמתארח בעצמו

 * 

 * 2022
   עוֹרֵך
   : Mason McDonald |
   כתוב לי

Advertisement



הדרך הקלה ביותר לפרוס את ה- API של CORE CORE ל- VM של LINUX





יש לי אירוח עצמי יישום .NET Core Console.

באינטרנט מוצגות דוגמאות עבור ליבת ASP.NET אבל אין לי שרת אינטרנט. פשוט יישום
שורת פקודה פשוט.

האם ניתן לעשות דבר כזה ליישומי קונסולה?

public static void Main(string[] args) { // I don't want a WebHostBuilder. Just a command line var host = new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup() .Build(); host.Run(); } 

ברצוני להשתמש ב- Startup.cs כמו ב- ASP.NET Core אך בקונסולה.

איך זה?



Advertisement





 * מה אתה מנסה להשיג? יישום קונסולה שיכול לשרת דפי אינטרנט? כן, זו תהיה "יישום
   ליבת asp.net עצמאי" ויש כמה דוגמאות זמינות, למשל. druss.co/2016/08/…
 * @ ArashMotamedi אני לא רוצה לארח יישום ASP.NET. אני רוצה לקבל יישום קונסולה
   ישן וטוב שמתחיל את פרויקט ספריית הכיתה שלי. חשבתי שאקבל הזרקת תלות וכו
   'בחינם.
 * הבנת. אבל כן, הגישה שלך מעט אחורה. זכור שכל יישומי הליבה של .net מורכבים
   מספריות עצמאיות, ובוודאי שאתה חופשי להפנות לכל אחת מהספריות הללו לכל סוג של
   פרויקט. בדיוק כך קורה שאפליקציית ליבה של Asp.net מוגדרת מראש כדי להתייחס
   להרבה מאותן ספריות וחושפת נקודת סיום http. אבל אם זו הזרקת תלות שאתה צריך
   לאפליקציית המסוף שלך, פשוט הפנה לספרייה המתאימה. להלן מדריך: andrewlock.net/…
 * @ArashMotamedi תודה רבה. מעדתי על המאמר הזה. אבל הייתי מאוד לא בטוח כי יש כל
   כך הרבה מידע על כל הדברים החדשים האלה ... הכתיבה היא כתשובה ואסמן אותה.

את כל .NET Core יישומים מורכבים מספריות וחבילות עצמאיות מעוצבות היטב אשר אתה
רשאי להפנות אליהן ולהשתמש בהן בכל סוג של יישום. בדיוק כך קורה שא Asp.net core
היישום מוגדר מראש כדי להפנות להרבה מאותן ספריות וחושף נקודת קצה של http.

אבל אם זו הזרקת תלות שאתה צריך לאפליקציית המסוף שלך, פשוט הפנה לספרייה המתאימה.
הנה מדריך:
http://andrewlock.net/using-dependency-injection-in-a-net-core-console-application/

אז נתקלתי בפתרון זה, בהשראת התשובה המקובלת:

Program.cs

public class Program { public static void Main(string[] args) { IServiceCollection services = new ServiceCollection(); // Startup.cs finally :) Startup startup = new Startup(); startup.ConfigureServices(services); IServiceProvider serviceProvider = services.BuildServiceProvider(); //configure console logging serviceProvider .GetService() .AddConsole(LogLevel.Debug); var logger = serviceProvider.GetService() .CreateLogger(); logger.LogDebug('Logger is working!'); // Get Service and call method var service = serviceProvider.GetService(); service.MyServiceMethod(); } } 

Startup.cs

public class Startup { IConfigurationRoot Configuration { get; } public Startup() { var builder = new ConfigurationBuilder() .AddJsonFile('appsettings.json'); Configuration = builder.Build(); } public void ConfigureServices(IServiceCollection services) { services.AddLogging(); services.AddSingleton(Configuration); services.AddSingleton(); } } 

appsettings.json

{ 'SomeConfigItem': { 'Token': '8201342s223u2uj328', 'BaseUrl': 'http://localhost:5000' } } 

MyService.cs

public class MyService : IMyService { private readonly string _baseUrl; private readonly string _token; private readonly ILogger _logger; public MyService(ILoggerFactory loggerFactory, IConfigurationRoot config) { var baseUrl = config['SomeConfigItem:BaseUrl']; var token = config['SomeConfigItem:Token']; _baseUrl = baseUrl; _token = token; _logger = loggerFactory.CreateLogger(); } public async Task MyServiceMethod() { _logger.LogDebug(_baseUrl); _logger.LogDebug(_token); } } 

IMyService.cs

public interface IMyService { Task MyServiceMethod(); } 

 * 2 זה היה מאוד מועיל. זה אפילו עובד אם היישום שלך משתמש ב- ASP.NET Core MVC
   (כל עוד הבקרים שלך רזים ולתצוגות שלך אין לוגיקה של יישומים). הדבר היחיד שהיה
   עלי לעשות היה ליצור תת מחלקה משלי של
   Microsoft.AspNetCore.Hosting.Internal.HostingEnvironment שנקרא
   MyHostingEnvironment ולהגדיר את ContentRootPath = Path.GetFullPath ("."); ואז
   לפני שקוראים לסטארט-אפ חדש ב- Program.cs לעשות IHostingEnvironment env = new
   MyHostingEnvironment (); services.AddSingleton(); ואז שנה את "הפעלה חדשה ()"
   ל"הפעלה חדשה (env) ".
 * תשובה מעולה! תודה רבה על השיתוף. פשוט הייתי זקוק לכמה מהדברים שה- WebHost
   מספק וזה בהחלט עובד כמו קסם. זה אמור להיות תבנית ב- VS למען האמת, זה יהיה
   מועיל ביותר כי אני רק צריך את האפליקציה שלי כדי להריץ על מארח לינוקס VPS
   מיניאטורי ללא WebHosting.
 * 1 אולי עדיף לחשוף את IConfiguration במקום IConfigurationRoot, יש לו תמיכה
   בהרחבות טובות יותר
 * @ BuddhiP איך הייתי חושף תצורת IC בדוגמה שלמעלה? builder.Build () מחזיר
   IConfigurationRoot?
 * במקרה שלי הייתי צריך לעדכן את startup.cs ב- .... serviceCollection.AddLogging
   (builder => builder .AddConsole (). AddFilter (level => level> =
   LogLevel.Information)); .....

דרך אחרת תהיה שימוש HostBuilder מ Microsoft.Extensions.Hosting חֲבִילָה.

public static async Task Main(string[] args) { var builder = new HostBuilder() .ConfigureAppConfiguration((hostingContext, config) => { config.SetBasePath(Directory.GetCurrentDirectory()); config.AddJsonFile('appsettings.json', true); if (args != null) config.AddCommandLine(args); }) .ConfigureServices((hostingContext, services) => { services.AddHostedService(); }) .ConfigureLogging((hostingContext, logging) => { logging.AddConfiguration(hostingContext.Configuration); logging.AddConsole(); }); await builder.RunConsoleAsync(); } 

+1000

תשובה זו מבוססת על הקריטריונים הבאים:

> ברצוני להשתמש במארח הגנרי החדש CreateDefaultBuilder ללא כל אחד מחומר האינטרנט
> של ASP.NET, באפליקציית קונסולה פשוטה, אך גם להיות מסוגל לסחוט את לוגיקת ההפעלה
> ב startup.cs על מנת להגדיר AppConfiguration ושירותים

אז ביליתי את הבוקר להבין איך אתה יכול לעשות דבר כזה. זה מה שיצא לי ...

חבילת ה- nuget היחידה שהשיטה הזו דורשת היא Microsoft.Extensions.Hosting (בזמן
כתיבת שורות אלה היה בגרסה 3.1.7). הנה קישור לחבילת Nuget. חבילה זו נדרשת גם
לשימוש CreateDefaultBuilder(), אז רוב הסיכויים שכבר הוסף את זה.

לאחר שתוסיף את התוסף (קוד ההרחבה בתחתית התשובה) לפרויקט שלך, הגדר את ערך התוכנית
שלך להיראות דומה לזה:

using Microsoft.Extensions.Hosting; class Program { static async Task Main(string[] args) { var host = CreateHostBuilder(args).Build(); await host.RunAsync(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseStartup(); // our new method! } 

אתה מוסיף א Startup.cs שצריך להיראות כך:

public class Startup { public IConfiguration Configuration { get; } public Startup(IConfiguration configuration) { Configuration = configuration; } public void ConfigureServices(IServiceCollection services) { // Configure your services here } } 

לאחר מכן אתה מגדיר את השירותים שלך כפי שהיית עושה ביישום ASP.NET Core טיפוסי
(מבלי שתצטרך להתקין אירוח אתרים של ASP.NET Core).


פרויקט הדגמה

Advertisement


הקמתי פרוייקט הדגמה של קונסולת .NET Core 3.1 ועושה כל מיני דברים כמו
IHostedService יישום, BackgroundService שירותי יישום, ארעיים / יחידים. הזרקתי גם
פנימה IHttpClientFactory ו IMemoryCache במידה טובה.

שבט את ההדבקה הזו ותן לו זריקה.


איך זה עובד

יצרתי שיטת הרחבה מחוץ ל- IHostBuilder שפשוט מיישם את IHostBuilder
UseStartup(this IHostBuilder hostBuilder) דפוס שכולנו רגילים אליו.

מאז CreateDefaultBuilder() מוסיף בכל היסודות, לא נותר הרבה להוסיף אליו. הדבר
היחיד שאנחנו מודאגים ממנו הוא להשיג את IConfiguration ויצירת צינור השירות שלנו
באמצעות ConfigureServices(IServiceCollection).


קוד המקור לשיטת הרחבה

///  /// Extensions to emulate a typical 'Startup.cs' pattern for  ///  public static class HostBuilderExtensions { private const string ConfigureServicesMethodName = 'ConfigureServices'; ///  /// Specify the startup type to be used by the host. ///  /// The type containing an optional constructor with /// an  parameter. The implementation should contain a public /// method named ConfigureServices with  parameter. /// The  to initialize with TStartup. /// The same instance of the  for chaining. public static IHostBuilder UseStartup( this IHostBuilder hostBuilder) where TStartup : class { // Invoke the ConfigureServices method on IHostBuilder... hostBuilder.ConfigureServices((ctx, serviceCollection) => { // Find a method that has this signature: ConfigureServices(IServiceCollection) var cfgServicesMethod = typeof(TStartup).GetMethod( ConfigureServicesMethodName, new Type[] { typeof(IServiceCollection) }); // Check if TStartup has a ctor that takes a IConfiguration parameter var hasConfigCtor = typeof(TStartup).GetConstructor( new Type[] { typeof(IConfiguration) }) != null; // create a TStartup instance based on ctor var startUpObj = hasConfigCtor ? (TStartup)Activator.CreateInstance(typeof(TStartup), ctx.Configuration) : (TStartup)Activator.CreateInstance(typeof(TStartup), null); // finally, call the ConfigureServices implemented by the TStartup object cfgServicesMethod?.Invoke(startUpObj, new object[] { serviceCollection }); }); // chain the response return hostBuilder; } } 

 * 2 def הולך להשליך לך את השפע - אבל אשאיר פתוח לגלגלי עיניים נוספים, ואם יש
   עוד תשובות טובות שראויות לשפע, אני פשוט אפתח עוד אחת
 * 4 עכשיו אנחנו צריכים יחסי ציבור עם HostBuilderExtensions לתוך הליבה!
 * 4 @KyleMit - מדהים! זה היה כיף מאוד לשחק איתו. היה לי לא רעיון שאתה יכול פשוט
   להפעיל IHost ללא WebHost. זה יועיל לפרויקטים עתידיים. תודה שפרסמת את השאלה.
 * 2 @JeremyLakeman - הסתכלתי בזה. זה חלק מה- Microsoft.AspNetCore.Hosting חבילה
   שהיא מה שהוא רוצה להימנע ממנה. חשבתי ליישם מחדש את החלק הזה, אבל בסופו של דבר
   זה היה המון קוד "העתק והדבק" מהחבילה ההיא ולכן הפסקתי לרדת בדרך זו.
 * 3 @KyleMit - הוסיף בקשת תכונה: github.com/dotnet/extensions/issues/3489

אני יודע שהשרשור הזה די ישן, אבל החלטתי לשתף את הקוד שלי בכל מקרה, מכיוון שהוא
גם משיג את הסוף שדניאל רצה (DI ביישום מסוף), אך ללא שיעור סטארט-אפ. נ.ב .: שים
לב שפתרון זה תקף עבור .NET Core או .NET Framework.

Program.cs:

public class Program { public static void Main(string[] args) { var services = new ServiceCollection(); DependencyInjectionConfiguration.ConfigureDI(services); var serviceProvider = services.BuildServiceProvider(); var receiver = serviceProvider.GetService(); receiver.YourServiceMethod(); } } public static class DependencyInjectionConfiguration { public static void ConfigureDI(IServiceCollection services) { services.AddScoped(); services.AddHttpClient(); // for example } } 

כן זה כן. יישומי ליבת ASP.NET יכולים להתארח בעצמם - כמו בדוגמה שלך - או להתארח
בתוך שרת אינטרנט כגון IIS. ב- .NET Core כל האפליקציות הן אפליקציות קונסולות.

 * בתרחיש שמתארח בעצמי כמו שלי. כיצד אוכל לחבר את Startup.cs?
 * אתה מתכוון שהייתי מפעיל שרת אינטרנט רק כדי להפעיל את יישום המסוף שלי?

אתה יכול לפתור את זה יותר קל. פשוט הכינו 2 קבצים, וערכו את השיטה הראשית:

Startup.cs

using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; (...) public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddMvc(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(); loggerFactory.AddDebug(); app.UseMvc(routes => { routes.MapRoute( name: 'default', template: '{controller}/{action}'); }); } } 

YourService.cs

using Microsoft.AspNetCore.Mvc; (...) public class MyeasynetworkController : Controller { [HttpGet] public IActionResult Run() { return Ok('Im Working'); } } 

ולערוך את ריק סטטי ראשי (מחרוזת [] טענות)

 var host = new WebHostBuilder() .UseKestrel() .UseUrls('http://+:5000') .UseStartup() .Build(); host.Run(); 

ואז פתח את http: // localhost: 5000 / Myeasynetwork / הפעל ואתה אמור לראות תגובה
בסטטוס 200 עם טקסט רגיל אני עובד



More From Around The Web

Brainberries
Wie Sophia Thiel nach dem Hass in die sozialen Medien zurückkehrt
Brainberries
Brainberries
Brainberries
Binge-Watching: Wie uns der Wahnsinn packt
Brainberries
Brainberries
Brainberries
Diese Hochzeitsfotos kann niemand wiederholen
Brainberries
Brainberries
Advertisement


Advertisement





Share Facebook Twitter Pinterest LinkedIn WhatsApp




אתה מעוניין

חשב את מספר ימי השבוע בין שני תאריכים ב- R.

מדוע JAVAWS.EXE עובר לתיקייה אחרת בכל עדכון?

בעיית טעינת תמונות ברזולוציות שונות למכשירי XXXHDPI


 * חָדָשׁ
 * פופולרי

שאילתת SQL למציאת רשומות בהן ספירה> 1

 * , 2022

המרת מספרים שלמים למספרים רומאיים

 * , 2022

קבלת שם קובץ הטפט הנוכחי ב- WINDOWS 7

 * JAVA, 2022

האם מותר קוד מקביל בשירותי JMX?

 * , 2022

 1. כיצד להשיג מילים לשיר שמנגן כעת ב- iOS10 (סוויפט 3)
 2. לא נמצא מכשיר (Nexus 5X עם Android 7.1.2) ב- Android Studio 2.3.1 הפועל תחת
    Ubuntu 16.04 Linux
 3. האם שווה ללמוד את האקסה? [סָגוּר]
 4. פקודת החיתוך לא עובדת

Advertisement

Advertisement





קוד PAPER.JS לא פועל

 * JAVASCRIPT

תחביר שלוש תקופות ב- VUEX?

 * 

האם ניתן לחלץ את יומן הצ'אט של סקייפ מסוים ממידע האפליקציה שלו אל שלי?

 * 

מכשיר IPHONE לא מזוהה על ידי XCODE, ITUNES

 * 

קיצור דרך למעבר בין כרטיסיות בכלי המפתחים של CHROME

 * 

Advertisement



קטגוריות

 * HOW
 * JAVASCRIPT
 * PYTHON
 * JAVA
 * ANDROID
 * HTML

האם יש דרך כללית להפעיל יישומי אינטרנט ב- GOOGLE COLAB?

 * 2022

כיצד להתקין את שרת MYSQL באובונטו במצב לא מקוון

 * 2022

מריץ הפעלה במסוף מק

 * 2022

Advertisement


Advertisement



ההיסטוריה שלנו, 2022

JAVASCRIPT של טטריס - צייר רשת על גבי בד

 * 2022

כיצד להשבית את ניווט המקלדת המוגדר כברירת מחדל באפליקציית MAC CATALYST?

 * 2022

מדוע הנמייה תמיד מוסיפה ש בסוף הקובץ שלי

 * 2022

JUNE, 2022 - מעניין

כיצד למקד את ריחוף הטקסט ב- SQUARESPACE?

 * 2022

כיצד לפצח סיסמת WPA2 באמצעות HASHCAT?

 * 2022

שמירת קובץ PDF לאחר סיבוב

 * 2022

סיפורים

מדוע נדחית גישה בהעברת תיקיה לתיקיית קבצי תוכנה עם הרשאות מנהל?

 * 

כיצד אוכל להגדיר את ערך ברירת המחדל עבור HTML אֵלֵמֶנט?

 * HOW

כיצד לקבל תובנות מקומיות של עמוד פייסבוק באמצעות API של גרף?

 * 


Copyright 2022 iw.algerianembassy-kuwait.com | הדואל שלנו:
box@algerianembassy-kuwait.com
Toggle navigation
 
✓
Thanks for sharing!
AddToAny
More…