استفاده از AngularJS و MVC 6 همراه با NET Core.

یکشنبه 7 شهریور 1395

در این مقاله قصد داریم نحوه نصب و اجرای ASP.NET core را آموزش دهیم و در کنار آن از Packge Manager ها ، gulp ، Type Script ، و از فریم ورک قدرتمند Angular2 استفاده کنیم .

استفاده از AngularJS و MVC 6 همراه با NET Core.

مواردی که در این مقاله بررسی می کنیم .

1.نصب محیط کار

2. بررسی اجمالی ASP.NET

3.شروع کار با .NET Core 1.0

4.بررسی Explorer

5.افزودن MVC 6

6.AngularJs 2

مدیریت وابستگی های سمت کاربر

استفاده از Pcakage Manager

استفاده از Task Runner

بوت استرپ با استفاده از Type Script

7. ساخت و اجرای برنامه

نصب محیط کار

پیش نیاز ها :

1 . Visual Studio 2015

2 . ASP.NET Core 1 . 0

Visual Studio 2015  : دقت داشته باشید که Visual Studio 2015  باید Update 3 باشد در غیر این صورت میتوان از طریق این لینک آن را بروزرسانی کنید.

دانلود .NET Core

میتوان یکی از این دو را دانلود کنید .

1..NET Core SDK  (کیت توسعه نرم افزار/ رابط خط فرمان )

2.2 ..NET Core 1 . 0 . 0 – VS 2015 Tooling Preview 2 (اجرای برنامه ها با .NET Core )

حال قبل از این که سراغ موضوع اصلی برویم یک توضیح مختصر راجب ASP.NET می دهیم.

بررسی اجمالی ASP.NET

.NET Framework

1.تنها بر روی پلتفرم Windows اجرا می شود .

2.ساخته شده بر روی .NET Framework runtime

3.پشتیبانی از ( (MVC,Web API &SignalR وDependency Injection (DI ).

4.MVC & Web API Controller را از هم جدا می کند.

.NET Core

1 . Open Source

2 .توسعه و اجرا به صورت Cross Platform

3 . ساخته شده برروی .NET Core runtime  و همچنین .NET Framework

4 . سهولت در تالیف پویا

5 . ساخته شده در Dependency Injection

6 . MVC & Web API Controller   هر دو از کلاس اصلی  ارث بری می کنند.

7 . ابزار هوشمند(Bower ، NPM ، Grunt & Gulp )

8 . ابزار خط فرمان

شروع کار با .NET Core 1.0

در ویژوال استودیو یک پروژه جدید از نوع ASP.NET Core Web Application  ایجاد می کنیم.

در این قسمت Empty را انتخاب کنید تا یک پروژه خالی ایجاد شود .

همان طور که مشاهده می کنید یک پروژه خالی در ویژوال استودیو ایجاد شده است .

در قسمت زیر فایل هایی که درون Explorer  قرار دارند بررسی می کنند .

بررسی Explorer

تصویر زیر فایل های درون Explorer را نمایش می دهد .

اول از همه فایل Program.cs را بررسی می کنیم .

Programe.cs : میخواهیم در این قسمت قطعه کد زیر را بررسی کنیم .

1.	namespace CoreMVCAngular  
2.	{  
3.	    public class Program   
4.	    {  
5.	        public static void Main(string[] args) {  
6.	            var host = new WebHostBuilder().UseKestrel().UseContentRoot(Directory.GetCurrentDirectory()).UseIISIntegration().UseStartup < Startup > ().Build();  
7.	            host.Run();  
8.	        }  
9.	    }  
10.	}  

.UseKestrel() :برای تعریف وب سرور استفاده می شود.ASP.NET Core از IIS   و ISS Express پشتیبانی می کند .

HTTP Servers

1 .  Microsoft.ASP.NET Core.Server.Kestrel(Cross-platform)

2 . Microsoft.ASP.NETCore.Server.WebListener(Windwos-Only)

.UseContentRoot(Directory.GetCurrentDirectory()) : مسیر اصلی برنامه است که آدرس root directory را برای برنامه مشخص می کند .

.UsellSintegration() : برای هاست کردن بر روی IIS  و IIS Express .

.UseStartup<Startup> : مشخص کردن کلاس Startup

Build() :  IwebHost   را میسازد تا برنامه Host  شود و درخواست های HTTP را مدیریت کند .

Startup.cs

این کلاس نقطه شروع تمام برنامه های .NET Core است که سرویس ها را برای برنامه فراهم می کند .

1.	namespace CoreMVCAngular   
2.	{  
3.	    public class Startup   
4.	    {  
5.	        // This method gets called by the runtime. Use this method to add services to the container.  
6.	        // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940  
7.	        public void ConfigureServices(IServiceCollection services) {}  
8.	            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.  
9.	        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {}  
10.	    }  
11.	}  

همان طور که مشاهده می کنید دو متد در کد بالا وجود. یکی از آنها ConfigureServices   و دیگری Configure است . در متد Configure سه پارامتر تعریف شده است.

IApplicationBuilder  یک کلاس را برای فراهم کردن مکانیزم ، configure درخواست یک برنامه مشخص می کند.

با استفاده از “Use” و پسوند متد میتوان MVC(middleware) را به مسیر درخواست اضافه کرد.

ConfigureServices   یک Extension Method است که ، پیکربندی استفاده از چند سرویس است .

Project.json : در این فایل وابستگی های برنامه لیست شده است و زمانی برنامه اجرا می شود که تنظیمات را گردآوری می کند.

Dependencies  : تمام وابستگی های برنامه میتوانند به قسمت Dependencies   اضافه شوند ، اگر افزودن آنها ضروری باشد intellisense  به شما کمک می کندآنها را اضافه کنید.

بعد از این که تغییرات را اعمال کردیم  وابستگی ها به طور خودکار از طریق Nuget باز گردانده می شوند.

در این قسمت کدها تغیر کرده اند :

•  "dependencies": {   
•  "Microsoft.NETCore.App": {   
•  "version": "1.0.0",   
•  "type": "platform"   
•  },   
•  "Microsoft.AspNetCore.Diagnostics": "1.0.0",   
•     
•  "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",   
•  "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",   
•  "Microsoft.Extensions.Logging.Console": "1.0.0",   
•  "Microsoft.AspNetCore.Mvc": "1.0.0"   
•  },

برای حذف ، میتوان بر روی Package کلیک راست کرده و Uninstall package    را انتخاب کنیم

Tools :در این بخش مدیریت و لیستی از Command ها وجود دارد. IISIntegration به طور پیش فرض اضافه می شود و این ابزار شامل  دستور Publish است که برای Publish کردن برنامه بر روی IIS است .

1.	"tools": {  
2.	"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"  
3.	},  

Framework  : همان طور که مشاهده میکنید ، در ابتدا زمانی که برنامه اجرا می شود به طور پیش فرض بر روی .NET Core اجرا می شود .

1.	“netcoreapp1 .0”.  
2.	"frameworks": {  
3.	    "netcoreapp1.0": {  
4.	        "imports": ["dotnet5.6", "portable-net45+win8"]  
5.	    }  
6.	},  

Build Option : Option ها در حین کامپایل شدن برنامه ساخته شده اند.

1.	"buildOptions": {  
2.	    "emitEntryPoint": true,  
3.	    "preserveCompilationContext": true  
4.	},  

RuntimeOption : مدیریت جمع آوری garbage  زمان اجرا برنامه .

1.	"runtimeOptions": {  
2.	    "configProperties": {  
3.	        "System.GC.Server": true  
4.	    }  
5.	},  

PublishOptions : تعریف کردن File/Folder و include/exclude کردن آنها از خروجی پوشه زمان Publish شدن برنامه .

1.	"publishOptions": {  
2.	    "include": ["wwwroot", "web.config"]  
3.	},  

Scripts : Scripts یک نوع Object است که Script ها را زمان اجرا یا Publish مشخص می کند .

1.	"scripts": {  
2.	    "postpublish": ["dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%"]  
3.	}  

افزودن MVC6

در این قسمت میخواهیم MVC6 را اضافه کنیم. در .NET Core 1.0   MVC & Web API تعریف شده اند ، و که به صورت جداگانه از کلاس اصلی ارث بری می کنند .

حال می خواهیم MVC Service را به برنامه اضافه می کنیم . Project.json را باز می کنیم و یک وابستگی به آن  اضافه می کنیم .دربخش dependencies  چند وابستگی به آن اضافه می کنیم .

•	"Microsoft.AspNetCore.Mvc": "1.0.0",
•	"Microsoft.AspNetCore.StaticFiles": "1.0.0"

و آن را ذخیره می کنیم .

به صورت خودکار Package ها به پروژه بازگردانی می شوند .

حال میخواهیم MVC(midleware)  را به request pipeline در متد Config به کلاس Startup اضافه می کنیم .

1.	public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {  
2.	    loggerFactory.AddConsole();  
3.	    if (env.IsDevelopment()) {  
4.	        app.UseDeveloperExceptionPage();  
5.	    }  
6.	    //app.UseStaticFiles();  
7.	    app.UseMvc(routes => {  
8.	        routes.MapRoute(name: "default", template: "{controller=Home}/{action=Index}/{id?}");  
9.	    });  
10.	}  

در متد ConfigureServices ، ما نیاز به افزودن framework Service  داریم . حال میخواهیم Service.AddMvc(); را اضافه می کنیم .

1.	public void ConfigureServices(IServiceCollection services) {  
2.	    services.AddMvc();  
3.	}  

ساختار پوشه های MVC

حال میخواهیم پوشه های MVC را اضافه کنیم  .View ها را به پوشه Views اضافه میکنیم . و Controller را به پوشه Controllers اضافه می کنیم .

همان طور که مشاهده می کنید در پوشه View یک فایل به نام “ViewImport.cshtml”  وجود دارد .

فایل ViewImport.cshtml شامل namespace هایی است که باعث می شود Viewهای پروژه به آن namespace ها دسترسی داشته باشند، در نسخه های قبلی از Web.config استفاده می کردند.

بیایید محتویات View  را ویرایش کنیم و پیغام خوش آمد گویی در آن قرار دهیم و برنامه را اجرا کنیم میتوانید ببینید که پیام خوش آمد گویی در صفحه ظاهر می شود.

AngularJS2

AngularJS2 یک فریم ورک جدید جاوا اسکریپتی است که سمت کاربر از آن استفاد می شود . این فریم ورک جاوا اسکریپتی کاملا جدید است و بر اساس TypeScript نوشته شده است.

مراحل زیر برای یادگیری است و نصب برنامه است .

مدیریت  وابستگی های سمت کاربر

استفاده از Package Manager (NPM)

استفاده از Task Runner

بوت استرپ با استفاده از Type Script

وابستگی های سمت کاربر : در این قسمت ما نیاز داریم  یک فایل پیکربندی JSON  را برای  Node Package Manager(NPM) اضافه کنیم ، برای این کار npm Configuration File را به پروژه اضافه می کنیم .

حال در  فایل npm config که به پروژه اضافی کرده ایم تغییراتی ایجاد می کنیم .

Package.json

1.	{  
2.	    "version": "1.0.0",  
3.	    "name": "asp.net",  
4.	    "private": true,  
5.	    "Dependencies": {  
6.	        "angular2": "2.0.0-beta.9",  
7.	        "systemjs": "0.19.24",  
8.	        "es6-shim": "^0.33.3",  
9.	        "rxjs": "5.0.0-beta.2"  
10.	    },  
11.	    "devDependencies": {  
12.	        "gulp": "3.8.11",  
13.	        "gulp-concat": "2.5.2",  
14.	        "gulp-cssmin": "0.1.7",  
15.	        "gulp-uglify": "1.2.0",  
16.	        "rimraf": "2.2.8"  
17.	    }  
18.	}  

در بخش وابستگی ، ما نیاز به اضافه کردن Angular2 داریم و دیگر وابستگی ها عبارت اند از :

Es6 یک کتابخانه  است که آن را با محیط های قدیمی سازگار می کند.

RXjs فایل های ماژولار را به فرمت های مختلف فراهم می کند.

SystemJS  System,import   را فعال می کند و فایل به طور مستقیم فایل هایType Script را وارد می کند.

همان طور که مشاهده می کنید ، دو Object متفاوت وجود دارد.یکی از وابستگی ها که برای عمل purposes به کار می رود و دیگری که devDependencies  است برای توسعه اجزای مربوط به آن می شود کاربرد دارد مانند  gulp  که برای اجرای Task های مختلف استفاده می شود.

حال بر روی Save کلیک کنید تا به صورت خودکار Restore شود. در این قسمت Package های مورد نیاز را به Dependencies  اضافه کرده ایم .

در این قسمت میخواهیم Package Manager دیگری به پروژه اضافه کنیم . برای این کار گزینه New Item را انتخاب کرده و در قسمت Client-Side ---> Bower Configuration File را اضافه می کنیم .

مقایسه NPM وBower :

Bower :

1.مدیریت کامپوننت های Html,Css,js

2.بارگذاری حداقل منابع

3.بارگذاری با استفاده از dependencies

NPM :

1.نصب وابستگی ها به صورت recursively

2.بارگذاری تو در تو dependencie ها

3.مدیریت NodeJS module

فایل config را باز کنید و سپس وابستگی های مورد نظر خود را در بخش وابستگی با نسخه خاص ، وارد کنید .

پس از این که فایل JSON را ویرایش کردیم ، Package ها به صورت خودکار Restore می شوند. در این قسمت شما میتوان مشاهده کنید که ما با استفاده از Bower ، Jquery  و Bootstrap را به پروژه اضافه می کنیم .

حال میخواهیم ، ، فایل پیکربندی gulp را به پروژه اضافه کنیم . برای این کار New Item را انتخاب کنید و در قسمت Client-Side ، فایل  gulp JSON را به پروژه اضافه کنید .

gulp.json

    /* 
    This file in the main entry point for defining Gulp tasks and using Gulp plugins. 
    Click here to learn more. http://go.microsoft.com/fwlink/?LinkId=518007 
    */  
    "use strict";  
    var gulp = require("gulp");  
    var root_path = {  
        webroot: "./wwwroot/"  
    };  
    //library source  
    root_path.nmSrc = "./node_modules/";  
    //library destination  
    root_path.package_lib = root_path.webroot + "lib-npm/";  
    gulp.task("copy-systemjs", function() {  
        return gulp.src(root_path.nmSrc + '/systemjs/dist/**/*.*', {  
            base: root_path.nmSrc + '/systemjs/dist/'  
        }).pipe(gulp.dest(root_path.package_lib + '/systemjs/'));  
    });  
    gulp.task("copy-angular2", function() {  
        return gulp.src(root_path.nmSrc + '/angular2/bundles/**/*.js', {  
            base: root_path.nmSrc + '/angular2/bundles/'  
        }).pipe(gulp.dest(root_path.package_lib + '/angular2/'));  
    });  
    gulp.task("copy-es6-shim", function() {  
        return gulp.src(root_path.nmSrc + '/es6-shim/es6-sh*', {  
            base: root_path.nmSrc + '/es6-shim/'  
        }).pipe(gulp.dest(root_path.package_lib + '/es6-shim/'));  
    });  
    gulp.task("copy-rxjs", function() {  
        return gulp.src(root_path.nmSrc + '/rxjs/bundles/*.*', {  
            base: root_path.nmSrc + '/rxjs/bundles/'  
        }).pipe(gulp.dest(root_path.package_lib + '/rxjs/'));  
    });  
    gulp.task("copy-all", ["copy-rxjs", 'copy-angular2', 'copy-systemjs', 'copy-es6-shim']);  

برای اجرای task های gulp ، بر روی فایل FileGulp کلیک راست می کنیم و Task Runner Explorer را انتخاب می کنیم .

برای اجرای Task بر روی آن کلیک راست کرده و Run را انتخاب کنید .

Task ها اجرا و به پایان رسیدند.

در Solution Explorer ، تمام بسته های مورد نیاز کپی می شوند .در این قسمت لازم است نوع es6-shim را تعیین کنیم ، اگر نوع آن را مشخص نکنیم با این خطا مواجه می شوید : "Cannot find name 'Promise

بوت استرپ با استفاده از TypeScript

TsConfig.json

1.	{  
2.	    "compilerOptions": {  
3.	        "noImplicitAny": false,  
4.	        "noEmitOnError": true,  
5.	        "removeComments": false,  
6.	        "sourceMap": true,  
7.	        "target": "es5",  
8.	        //add this to compile app component  
9.	        "emitDecoratorMetadata": true,  
10.	        "experimentalDecorators": true,  
11.	        "module": "system",  
12.	        "moduleResolution": "node"  
13.	    },  
14.	    "exclude": ["node_modules", "wwwroot/lib"]  
15.	}  

noImplicitAny : رفع کردن خطای  expressions و declarations با "any".

noEmitOnError : اگر خروجی منتشر نشود نوع خطا گزارش می شود .

Target : مشخص کردن نسخه ECMAScript به طور پیش فرض بر روی es5 قرار دارد .

experimentalDecorators : فعال کردن experimental برای پشتیبانی از  ES7 decorators .

یک پوشه برای فایل .ts در wwwroot اضافه می کنیم .

در  Solution Explorer ، شما میتوان فایل های زیر را اضافه کنید .

در main.ts ، Code Snippet های bootstrap , AngularJS را به component اضافه کرده ایم .

    import {bootstrap} from 'angular2/platform/browser';  
    import {AppComponent} from './app.component';  
    import {enableProdMode} from 'angular2/core';  
      
    enableProdMode();  
    bootstrap(AppComponent);  

Component : تابع Component را  از کتاب خانه Angular2 اضافه می کند با انجام این کار کلاس AppComponent نیز میتوان از Component های دیگر به کد ما افزوده شود.

import {Component} from 'angular2/core';

1.	@Component({  
2.	    selector: 'core-app',  
3.	    template: '<h3>Welcome to .NET Core 1.0 + MVC6 + Angular 2</h3>'  
4.	})  
5.	export class AppComponent {}  

MVC View : زمان آن رسیده است که layout خود را بروزرسانی کنیم و  کتابخانه های خود را  لینک کنیم .

حال میخواهیم Refrence  های خود را به صفحه layout اضافه کنیم .

1.	<!DOCTYPE html>  
2.	<html>  
3.	  
4.	<head>  
5.	    <meta name="viewport" content="width=device-width" />  
6.	    <title>@ViewBag.Title</title>  
7.	    <script src="~/lib-npm/es6-shim/es6-shim.js"></script>  
8.	    <script src="~/lib-npm/angular2/angular2-polyfills.js"></script>  
9.	    <script src="~/lib-npm/systemjs/system.src.js"></script>  
10.	    <script src="~/lib-npm/rxjs/Rx.js"></script>  
11.	    <script src="~/lib-npm/angular2/angular2.js"></script>  
12.	</head>  
13.	  
14.	<body>  
15.	    <div> @RenderBody() </div> @RenderSection("scripts", required: false) </body>  
16.	  
17.	</html> Index.cshtml @{ ViewData["Title"] = "Home Page"; }  
18.	<core-app>  
19.	    <div>  
20.	        <p><img src="~/img/ajax_small.gif" /> Please wait ...</p>  
21.	    </div>  
22.	</core-app> @section Scripts {  
23.	<script>  
24.	    System.config({  
25.	        packages: {  
26.	            'app': {  
27.	                defaultExtension: 'js'  
28.	            }  
29.	        },  
30.	    });  
31.	    System.import('app/main').then(null, console.error.bind(console));  
32.	</script> }  

برای این که فایل های پروژه Static باشند به  startup خود app.UseStaticFiles(); را اضافه می کنیم .

Build و اجرای پروژه

خروجی

حال میتوان مشاهده کنید که برنامه با Angularjs2 کار می کند .

آموزش asp.net mvc

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید