fekre-bekr,learning,source,سورس,سورس رایگان,آموزش,اخبار,فناوری اطلاعات,mvc,.net,ساری,آموزشگاه,asp.net,c#.net,programing,c++,vb,آموزش برنامه نویسی,دانلود

اشتراک در سایت


مطالب تصادفی
اخبار و مقالات در فکر بکر حل تمرین مسائل برنامه نویسی از بخش آرایه ها در سی شارپ(مالیات)

جهت مشاهده سوال ودانلود سورس آن لطفا به ادامه مطلب توجه نمایید. ...


اخبار و مقالات در فکر بکر آموزش ایجاد برنامه نصب (setup) قسمت دوم

در این مرحله برای پروژه ای که با زبان C# طراحی کردیم یک فایل setup خواهیم ساخت.در این آموزش برای ساخت برنامه setup از نرم افزار i ...


اخبار و مقالات در فکر بکر آموزش ثبت تصویر توسط دوربین در برنامه نویسی اندروید به زبان c#.net

در این آموزش به نحوه ثبت تصویر و ذخیره آن در حافظه گوشی با سیستم عامل اندروید با زبان برنامه نویسی سی شارپ (C#.net)خواهیم پرداخت. ...


اخبار و مقالات در فکر بکر حل تمرین مسائل برنامه نویسی از بخش دستورات تکرار (حلقه ها) در سی شارپ

جهت مشاهده سوال و دانلود سورس آن لطفا به ادامه مطلب توجه نمایید. ...


اخبار و مقالات در فکر بکر آموزش ارسال ایمیل توسط اکانت گوگل به زبان C#.net

در این مقاله شما را با روش ارسال ایمیل اشنا خواهیم ساخت لطفا به ادامه مطلب توجه نمایید. ...


اخبار و مقالات در فکر بکر حل تمرین مسائل برنامه نویسی از بخش دستورات تکرار (حلقه ها) در سی شارپ

جهت مشاهده سوال و دانلود سورس آن لطفا به ادامه مطلب توجه نمایید. ...


اخبار و مقالات در فکر بکر آموزش ایجاد لینک دانلود در mvc

در این برنامه به آموزش نحوه ایجاد لینک دانلود در برنامه های از نوع Asp.Net MVC می پردازیم. لطفا به ادامه مطلب توجه کنید. ...


اخبار و مقالات در فکر بکر حل تمرین مسائل برنامه نویسی از بخش آرایه ها در سی شارپ

جهت مشاهده سوال ودانلود سورس آن لطفا به ادامه مطلب توجه نمایید. ...


اخبار و مقالات در فکر بکر آموزش رسم نمودار در Asp.net

عرض سلام خدمت کاربران فکر بکر – قبل از هرچیز بابت تاخیر در ارائه مطالب بخاطر مشغله کاری از شما عزیزان عذر خواهی میکنم.در این آمو ...


اخبار و مقالات در فکر بکر سورس چرخش تصاویر در C#

جهت دانلود سورس چرخش تصاویر در سی شارپ به ادامه مطلب توج نمایید ...


اخبار و مقالات در فکر بکر پیاده سازی مسیریابی با استفاده از الگوریتم پیمایش اول سطح یا جستجوی اول سطح (BFS) در سی شارپ

الگوریتم پیمایش اول سطح یا جستجوی اول سطح (Breadth First Search - BFS) از جمله الگوریتم‌های مشهور پیمایش و جستجوی گراف است که در ...


اخبار و مقالات در فکر بکر آموزش نحوه فارسی سازی kendo ui 2016

این روزها استفاده از کامپوننت kendo ui از محصولات شرکت تلریک در میان برنامه نویسان مورد توجه خاصی قرار گرفته است بنابراین تصمیم گ ...


اخبار و مقالات در فکر بکر طراحی سایت با HTML 6

ورژن 6HTML نسخه ی توسعه یافته HTML ها است که دارای NameSpaces با ساختار XML می باشد. از ویژگی های مهم NameSpaces این است که با ا ...


اخبار و مقالات در فکر بکر سورس برنامه آموزش تایپ با کیبورد به زبان C#

با سلام - این برنامه شامل آموزش تایپ کردن می باشد . و نکته قابل توجه آن این است که این برنامه بصورت یک بازی در سه مرحله طراحی شده ...


پیوندها
5 (1)

تزریق وابستگی یکی از مباحث مبهم برای برنامه نویسانی که به تازگی با این عنوان آشنا شده اند می باشد.اما باید در نظر داشته باشید که DI باعث افزایش انعطاف پدیری در ایجاد برنامه ها میشود.
گروه : Asp.net Core
تاریخ انتشار: 1397/11/11

فکر بکر

تزریق وابستگی یکی از مباحث مبهم برای برنامه نویسانی که به تازگی با این عنوان آشنا شده اند می باشد.اما باید در نظر داشته باشید که DI باعث افزایش انعطاف پدیری در ایجاد برنامه ها میشود.

در این آموزش ابتدا یک پروژه بصورت Empty می سازیم و به تدریج برای شما شرح خواهم داد که dependency injection (DI) چگونه کار می کند.
برای شروع یک پروژه از نوع ASP.NET Core Web Application (.NET Core)  و بصورت Empty ایجاد کنید و نام آنرا DependencyInjection  قرار دهید.
محتویات کلاس startup.cs را بصورت زیر ویرایش کنید.

public class Startup {

public void ConfigureServices(IServiceCollection services) {

services.AddMvc();

}

public void Configure(IApplicationBuilder app, IHostingEnvironment env) {

app.UseStatusCodePages();

app.UseDeveloperExceptionPage();

app.UseStaticFiles();

app.UseMvcWithDefaultRoute();

}

}

 

ایجاد Model و Repository

درون پروژه ایجاد شده یک پوشه به نام Models ایجاد کنید و کلاسی به نام Product درون آن اضافه نمایید.

public class Product {

public string Name { get; set; }

public decimal Price { get; set; }

}

 جهت استفاده از مدل ایجاد شده یک اینترفیس  بنام IRepository درون پوشه Models ایجاد کنید.

public interface IRepository

    {

        IEnumerable<Product> Products { get; }

        Product this[string name] { get; }

        void AddProduct(Product product);

        void DeleteProduct(Product product);

    }

 اینترفیس ایجاد شده مجموعه عملیاتی را که بر روی مدل ایجاد شده انجام میشود را ارائه میکند. لذا برای پیاده سازی اینترفیس کلاسی به نام MemoryRepository را درون پوشه Models بصورت زیر اضافه نمایید.

public class MemoryRepository : IRepository

    {

        private Dictionary<string, Product> products;

        public MemoryRepository()

        {

            products = new Dictionary<string, Product>();

            new List<Product> {

new Product { Name = "Kayak", Price = 275M },

new Product { Name = "Lifejacket", Price = 48.95M },

new Product { Name = "Soccer ball", Price = 19.50M }

}.ForEach(p => AddProduct(p));

        }

        public IEnumerable<Product> Products => products.Values;

        public Product this[string name] => products[name];

        public void AddProduct(Product product) =>

        products[product.Name] = product;

        public void DeleteProduct(Product product) =>

        products.Remove(product.Name);

    }

در این برنامه از یک دیکشنری به نام products بعنوان منبع داده استفاده میکنیم

ایجاد Controller  و View

پوشه ای به نام Controllers درون پروژه ایجاد کنید و یک کلاس به نام HomeController درون آن اضافه کنید.

public class HomeController : Controller {

public ViewResult Index() => View();

}

کنترلر فوق دارای یک اکشن به نام Index از نوع ViewResult می باشد که خروجی آن یک ویو به نام Index را بصورت زیر ایجاد میکنیم
برای ایجاد ویو درون پروژه یک پوشه به نام Views ایجاد کنید و سپس درون پوشه ایجاد شده پوشه دیگری به نام Home ایجاد نمایید و در پایان فایلی به نام Index.cshtml  را بصورت زیر اضافه نمایید.

 

@model IEnumerable<Product>

@{ Layout = null; }

<!DOCTYPE html>

<html>

<head>

    <meta name="viewport" content="width=device-width" />

    <title>Dependency Injection</title>

    <link href="~/lib/bootstrap/css/bootstrap.min.css" rel="stylesheet" />

 

</head>

<body class="m-1 p-1">

    <table class="table table-bordered table-sm table-striped">

        <thead>

            <tr><th>Name</th><th>Price</th></tr>

        </thead>

        <tbody>

            @if (Model == null)

            {

                <tr><td colspan="3" class="text-center">No Model Data</td></tr>

            }

            else

            {

                @foreach (var p in Model)

                {

                    <tr>

                        <td>@p.Name</td>

                        <td>@string.Format("{0:C2}", p.Price)</td>

                    </tr>

                }

            }

        </tbody>

    </table>

</body>

</html>

در صورت تمایل جهت اضافه نمودن فایل بوت استرپ ابتدا یک فایل به نام  libman.json به پروژه اضافه نمایید و محتویات گانرا بصورت زیر ویرایش کنید.

{

  "version": "1.0",

  "defaultProvider": "cdnjs",

  "libraries": [

    {

      "library": "twitter-bootstrap@4.2.1",

      "destination": "wwwroot/lib/bootstrap/"

    }

  ]

}

 

 

جهت استفاده از tag helper و فضای نام مدل ایجاد شده در ویوی مورد نظر فایل _ViewImports.cshtml را درون پوشه Views بصورت زیر اضافه نمایید.

 @using DependencyInjection.Models

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

معمولا اکثر برنامه نویسان جهت استفاده از کلاس MemoryRepository()  نمونه ای از آن را درون کنترلر بصورت زیر ایجاد میکنند.

public class HomeController : Controller {

public ViewResult Index() => View(new MemoryRepository().Products);

}

در صورتیکه برنامه را اجرا کنید با هیچ خظایی روبرو نخواهید شد اما قسمت بد ماجرا این است که در صورتیکه برنامه نویس تمایل داشته باشد پیاده سازی دیگری از اینترفیس IRepository  را برای کنترلر در نظر بگیر نیازمند ویرایش کد در کلاس کنترلر می باشد لذا برای حل این مشکل از مفهوم و امکانات dependency injection در Asp.net core استفاده میکنیم.

فرض کنید گیاده سازی دیگری از اینترفیس بصورت زیر باشد.

کلاسی به نام AlternateRepository را درون پوشه  Models به صورت زیر اضافه نمایید.

  public class AlternateRepository : IRepository

    {

        private Dictionary<string, Product> products;

        public AlternateRepository()

        {

            products = new Dictionary<string, Product>();

            new List<Product> {

new Product { Name = "Corner Flags", Price = 34.95M },

new Product { Name = "Stadium", Price = 79500M }

}.ForEach(p => AddProduct(p));

        }

        public IEnumerable<Product> Products => products.Values;

        public Product this[string name] => products[name];

        public void AddProduct(Product product) =>

        products[product.Name] = product;

        public void DeleteProduct(Product product) =>

        products.Remove(product.Name);

    }

ما برای اینکه بخواهیم از کلاس AlternateRepository جهت پیاده سازی اینترفیس IRepository استفاده نماییم بگونه ای که نیازمند به ویرایش کد درون کنترلرها نباشیم لذا باید کد زیر را درون کلاس   startup.cs درج نماییم.

public void ConfigureServices(IServiceCollection services)

        {

            services.AddTransient<IRepository, AlternateRepository>();

            services.AddMvc();

        }

کد فوق در واقع همان مفهوم تزریق وابستگی و یا مفهوم dependency injection می باشد.

با دستور فوق در صورتیکه در هر قسمت از برنامه نیازمند به شیئ از کلاس AlternateRepository  باشیم این سرویس بصورت خودکار توسط برنامه ایجاد میشود .

بعنوان مثال کدهای زیر را درون کنترلر Home  ویرایش  کنید.

public class HomeController : Controller

    {

        private IRepository repository;

        public HomeController(IRepository repo) => repository = repo;

        public ViewResult Index() => View(repository.Products);

    }

در صورتیکه برنامه را اجرا کنید با توجه به سرویس ایجاد در کلاس startup یک شیئ از نوع AlternateRepository   ایجاد میشود و نیازی به ویرایش کدها در کنترلر نخواهیم بود

در واقع مراحل کار در پروژه ایجاد شده بصورت زیر خواهد بود.

  •  درخواستی از سمت کلاینت برای اکشن index از کنترلر Home ارسال میشود
  • Mvc از سرویسهای Asp.net  میخواهد شیئ از کلاس HomeController ایجاد کند.
  • سرویس متوجه سازنده کنترلر home  میشود که درای یک شیئ از کلاس Irepository می باشد.
  • سرویس بدنبال پیاده سازی از اینترفیس IRepository میگردد.
  • سرویس با توجه به دستور    services.AddTransient<IRepository, AlternateRepository>(); یک شیئ از آن را ایجاد میکند.
  •  درخواست HTTP  اجرا می شود.

مطلب مشابهی وجود ندارد
پارسا محمودی
|
1397/11/11

با سلام اموزش خیلی خوبی بود ممنون
محمد مهدوی
|
1397/11/11

سلام خواهش میکنم - موفق باشید

c4rfcE

آموزش ساخت صفحه Page Not Found (404) در Aspnet core -------- آموزش ایجاد Tag Helper سفارشی در Asp.net core -------- آموزش نحوه ایجاد Model برای دیتابیس موجود در Entity Framework Core -------- آموزش نحوه Upload و Download در Asp.net core 2 -------- آموزش dependency injection در Asp.net core 2 -------- آموزش تحت شبکه کردن برنامه های مبتنی بر c# در sql server -------- آموزش استفاده از Bundler & Minifier در Asp.Net Core -------- مروری بر Identity در Asp.net core2.1 (بخش دوم) -------- مروری بر Identity در Asp.net core2.1 (بخش اول) -------- آموزش مبحث Single Responsibility Principle (SRP) از بخش اصول طراحی شی گرا (SOLID) -------- آموزش publish کردن برنامه های Asp.net core بر روی سرور iis -------- پیاده سازی مسیریابی با استفاده از الگوریتم پیمایش اول سطح یا جستجوی اول سطح (BFS) در سی شارپ -------- آشنایی با SignalR در Asp.net core -------- آموزش استفاده از کلاس SeedData در Asp.net Core -------- قالب سایت فروشگاهی -------- آموزش ایجاد برنامه نصب (setup) قسمت سوم -------- آموزش ایجاد برنامه نصب (setup) قسمت دوم -------- آموزش ایجاد برنامه نصب (setup) قسمت اول -------- آموزش عملیات CRUD با استفاده از Ragor Pages در Asp.net Core2.0 -------- آموزش ثبت تصویر توسط دوربین در برنامه نویسی اندروید به زبان c#.net -------- حل مساله n وزیر با استفاده از الگوریتم ژنتیک و بصورت گرافیکی -------- آموزش نمایش تصویر loading در سمت client جهت بارگزاری صفحات با حجم زیاد از سرور در asp.net mvc -------- آموزش اعتبار سنجی غیر همزمان(AsyncValidation) با استفاده از جاوااسکریپت در Asp.net mvc -------- آموزش ایجاد breadcrumb با استفاده از sitemap در MVC -------- آموزش ایجاد برنامه چت دوطرفه با استفاده از Socket در سی شارپ -------- آموزش ارسال و دریافت فایل در برنامه تحت شبکه با استفاده ار سوکت (Socket) -------- آموزش رسم نمودار در Asp.net -------- آموزش ایجاد مگا منو -------- آموزش استفاده از Grid mvc در Asp.net mvc -------- پیاده سازی سیستم احراز هویت کاربران در Asp.net MVC (بخش چهارم) -------- پیاده سازی سیستم احراز هویت کاربران در Asp.net MVC (بخش سوم) -------- پیاده سازی سیستم احراز هویت کاربران در Asp.net MVC (بخش دوم) -------- پیاده سازی سیستم احراز هویت کاربران در Asp.net MVC (بخش اول) -------- بررسی نکات امنیتی در آپلود تصاویر -------- آموزش async - await در یک مثال عملی -------- قالب پنل ادمین -------- آموزش Repository pattern در Asp.net MVC -------- آموزش Serialize و Deserialize اطلاعات در قالب Json به زبان C#.net -------- آموزش ویرایش مطالب با استفاده از x-editable در Asp.net MVC -------- آموزش ایجاد آدرسهای کاربرپسند(user friendly URLs) در Asp.net MVC --------

ابتدای صفحه