כיצד להשתמש בהזרקת תלות ב- ASP.Net Core

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

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

הפיכת שירות לזמין באמצעות הזרקת תלות ב- ASP.Net

כעת נבנה שירות פשוט ב- Visual Studio באמצעות ASP.Net Core ונמחיש כיצד נוכל להוסיף אותו למיכל הזרקת התלות, לרשום אותו בצינור ואז לצרוך אותו ביישום שלנו. בצע את הצעדים הבאים ליצירת פרוייקט ASP.Net Core חדש ב- Visual Studio 2017 או Visual Studio 2015. אם אתה משתמש ב- Visual Studio 2015, ודא שהתקנת .Net Core.

  1. פתח את Visual Studio
  2. לחץ על קובץ -> חדש -> פרויקט
  3. בחלון הדיאלוג החדש של הפרויקט, בחר בתבנית הפרויקט "ASP.NET Core Web Application"
  4. ציין את השם והמיקום של הפרויקט שלך ולחץ על אישור כדי לשמור

כעת, צור את מחלקת ה- POCO הבאה (אובייקט CLI ישן רגיל). מחלקה זו מכילה מאפיין אחד בלבד - הוא מייצג את כל תחומי הנושא המכוסים על ידי מחברי חברת פרסום מסוימת.

מעמד ציבורי TopicArea

    {

        מחרוזת ציבורית שם {get; מַעֲרֶכֶת; }

    }

שקול את הממשק הבא בשם ITopicAreaServiceהמייצג את החוזה עבור ה- TopicAreaService.

ממשק ציבורי ITopicAreaService

    {

        IEnumerable GetAllTopicAreas ();

    }

ITopicAreaServiceהממשק מכיל ההכרזה של שיטה אחת בשם GetAllTopicAreas(). TopicAreaServiceמיישמת הקבוצה את ITopicAreaServiceכמוצג להלן.

מעמד ציבורי TopicAreaService: ITopicAreaService

    {

        ציבורי IEnumerable GetAllTopicAreas ()

        {

            להחזיר רשימה חדשה

        {

            TopicArea חדש {Name},

            TopicArea חדש {Name},

            TopicArea חדש {שם}

        };

        }

    }

רישום שירותים לצורך הזרקת תלות ב- ASP.Net

השלב הבא הוא לרשום את TopicAreaServiceמיכל הזרקת התלות הזמין כחלק מקוד ASP.Net. לשם כך, כתוב את פיסת הקוד הבאה ConfigureServicesבשיטה בקובץ Startup.cs. ConfigureServicesהשיטה מוסיפה שירותים מיכל השירותים, מה שהופך אותם זמינות באפליקציה באמצעות הזרקת תלות. זה נקרא על ידי זמן הריצה באופן אוטומטי.

חלל ציבורי ConfigureServices (שירותי ISCollection)

        {

            services.AddTransient ();

            // הוסף שירותי מסגרת.

            services.AddMvc ();

        }

אם יש לך מספר שירותים שיש לרשום, תוכל להשתמש בשיטת הרחבה כמוצג להלן.

מחלקה סטטית ציבורית ServiceExtensions

    {

        שירות סטטי ציבורי IServiceCollection Services (

            שירותי IServiceCollection זה)

        {

            services.AddTransient ();

            // הוסף את כל שאר השירותים כאן.

            שירותי החזרה;

        }

    }

השימוש RegisterServicesבשיטה מאפשר לך לשמור על ConfigureServicesהשיטה שלך רזה ומתוחזקת. במקום לציין כל שירות ConfigureServices, כל שעליך לעשות הוא להתקשר RegisterServicesלשיטת ההרחבה פעם אחת ConfigureServicesבשיטה שלך, כפי שמוצג בקטע הקוד שלמטה.

חלל ציבורי ConfigureServices (שירותי ISCollection)

        {

            services.RegisterServices ();

            // הוסף שירותי מסגרת.

            services.AddMvc ();

        }

חיי הזרקת תלות ב- ASP.Net

אורך החיים של הזרקת התלות משמש כדי לציין מתי האובייקטים התלויים נוצרים ונוצרים מחדש. בכל מה שקשור לתקופות חיים למקרי הזרקת תלות ביישומי ASP.Net Core, יש שלוש אפשרויות:

  1. סינגלטון: פירוש הדבר שרק מופע אחד ייצור ושותף על ידי כל הצרכנים.
  2. Scoped: משמעות הדבר היא שייווצר מופע אחד לכל טווח (כלומר, מופע אחד לכל בקשה ליישום).
  3. חולף: זה מרמז שהרכיבים לא ישותפו אלא ייווצרו בכל פעם שהם מתבקשים.

שימו לב שבדוגמא זו השתמשנו Transientבסוג. קטע הקוד הבא ממחיש כיצד תוכלו להשתמש בסוגי החיים האחרים בעת רישום השירות שלכם.

services.AddScoped ();

services.AddSingleton ();

שימוש בשירות באמצעות הזרקת תלות ב- ASP.Net

כעת, לאחר שהשירות שהטמענו נוסף לצינור, תוכלו להשתמש בו בכל אחד מהבקרים בפרויקט ASP.Net Core שלכם. קטע הקוד הבא ממחיש כיצד ניתן לבקש מופע של TopicAreaServiceהבקר שלך.

פרטי קריאה פרטית ITopicAreaService _topicAreaService;

    בקר ברירת מחדל ציבורית (נושא ITopicAreaServiceAreaService)

    {

        _topicAreaService = topicAreaService;

    }

הנה איך GetAllTopicAreasהשיטה של TopicAreaServiceנקראת משיטת הפעולה של הבקר שלך.

[HttpGet]

        ציבורי IEnumerable GetAllTopicAreas ()

        {

            להחזיר _topicAreaService.GetAllTopicAreas ();

        }

להלן רשימת הקוד המלאה של מחלקת הבקר לעיונך.
באמצעות Microsoft.AspNetCore.Mvc;

באמצעות System.Collections.Generic;

מרחב השמות ASPNETCoreDI.Controllers

{

    [מפיק ("יישום / json")]

    [מסלול ("api / ברירת מחדל")]

    מחלקה ציבורית DefaultController: בקר

    {

        פרטי קריאה פרטית ITopicAreaService _topicAreaService;

        בקר ברירת מחדל ציבורית (נושא ITopicAreaServiceAreaService)

        {

            _topicAreaService = topicAreaService;

        }

        [HttpGet]

        ציבורי IEnumerable GetAllTopicAreas ()

        {

            להחזיר _topicAreaService.GetAllTopicAreas ();

        }

    }

}

באפשרותך למנף את התמיכה המובנית בהזרקת תלות ב- ASP.Net Core לבניית יישומים מודולריים, רזים ונקיים, קלים לתחזוקה ובדיקה. ספק הזרקת התלות המובנה ב- ASP.Net Core אינו עשיר בתכונות כמו מיכלים כמו StructureMap ו- Ninject, אך הוא די מהיר וכפי שראינו קל להגדיר ולהשתמש.