다음은 Application Startup in ASP.NET Core hDocs.microsoft.com/en-us/aspnet/core/fundamentals/startup) 의 내용을 번역했습니다.

 

.

 

 

Application Startup in ASP.NET Core

 

Startup Class 는 응용 프로그램에 대한 모든 Request 를 처리하는 Request pipeline을 구성한다.

Startup Class

ASP.NET Core Apps 는 Startup class 를 필요로한다.. 관례상 Startup class 는 "Startup" 이라 부른다.

Main program WebHostBuilderExtensions 의  UseStartup<Tstartup> method 내에 startup class 이름을 지정한다.

 

다양한 환경에 대해 별도의 Startup class 를 구성하는 것도 가능하며, runtime 이 그 중 적합한 하나를 선택하게된다.

WebHost Configuration 이나 Option 에서 StartAssembly 를 지정한다면 Hosting 은 지정한 startup assembly 를  Load 하고 Startup 이나 Startup[Environment] Type 을 검색한다.

 

StartupLoader 의 FindStartupType다양한 환경에서의 작업 (Working with multiple environment) 을 참조하자.

UseStartup<TStartup> 를 사용한 접근을 권장한다.

 

Startup class 의 생성자는 dependency injection 을 통해 제공하는 종속성을 수락하는 작업이 가능하다.

IHostingEnvironment 를 사용한 Configuration 소스를 구성하는 작업이 가능하고, ILoggerFactory 를 사용하여  Logging Provider 를 구성하는 작업이 가능하다.

 

Startup class 는 Configure Method 를 반드시 포함해야하며 선택적으로 ConfigureServices Method 를 포함하는 것이 가능하다. 이 두 Method 는 Application 이 시작할 때 호출된다.

이 Class 는 이 Method 의 환경별 (environment-specific) 버전을 포함하는 것 또한 가능하다. 

 

Application startup 동안 예외처리 에 대해 배워보자.

 


Configure Method


Configure Method 는 ASP.NET application 이 HTTP Request 에 대해 Respond 하는 방법을 지정하는데 사용한다. request pipeline 은 dependency injection 에 의해 제공되는 IApplicationBuilder 에 추가되는 middleware  를 추가하므로써 구성된다.

 

default web site template 를 이용한 다음 예제에서 몇가지 확장 Method 들이 BrowserLink, 오류페이지, 정적파일, ASP.NET MVC, Identity 들을 지원하는 pipeline 을 구성하는데 사용된다.

 

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();
 
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();
        app.UseBrowserLink();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }
 
    app.UseStaticFiles();
 
    app.UseIdentity();
 
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

 

각 Use 확장 메소드는 request pipeline 에 middleware component 를 추가한다.

예를 들어, UseMvc 확장 메서드는 routing middleware 를  request pipeline 에 추가하고 MVC 를 기본 handler로 구성한다.


IApplicationBuilder를 사용하는 방법에 대한 자세한 정보는 Middleware 를 살펴보자.

IHostingEnvironment 와 ILoggerFactory와 같은 추가적인 서비스도 method signature 에 지정할 수 있으며, 이 경우 이 서비스들은 사용가능하다면 삽입(injected)될 것이다.

ConfigureServices method

ConfigureServices method 는 선택 사항이다. 하지만 사용될 경우 runtime 에 의해 Configure method 보다 먼저 호출된다. (일부 기능은 request pipeline 에 연결되기 전에 추가된다).

Configuration option 은 이 method 에 설정된다.


실질적인 Setup 이 필요한 기능들은 IServiceCollection 의 Add[Service] Extension method 다.

default web site template 를 이용한 다음 예제는  Entity Framwork, Identity, MVC 를 위한 Service 를 사용하기위해 app 을 구성한다.

 

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
 
    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();
 
    services.AddMvc();
 
    // Add application services.
    services.AddTransient<IEmailSender, AuthMessageSender>();
    services.AddTransient<ISmsSender, AuthMessageSender>();
}

 

service container 에 서비스를 추가하는 작업은 dependency injection 을 통해 application 내에서 Service 를 사용할 수 있다.

 

Startup 에서 사용가능한 Service

 

ASP.NET Core 의 dependency injection 은  application 의 startup 동안 여러 application service 를 제공한다.

Startup class 의 생성자나 Startup class 의 Configure 나 ConfigureService method 중 한 method 의 parameter 로 적당한 Interface 를 추가함으로써 이런 Service 를 요청하는 것이 가능하다.

 

Startup class 의 각 method 를 호출되는 순서대로 살펴보면, 다음 Service 들이 parameter 로 요청될 것이다.

• Constructor 에서 : IHostingEnvironment, ILoggerFactory
• ConfigureServices method에서 : IServiceCollection
• Configure method 에서 : IApplicationBuilder, IHostingEnvironment, ILoggerFactory, IApplicationLifetime

 

추가 자료

 

이제 제 공부차원에서 https://docs.microsoft.com/en-us/aspnet/core 에 있는 내용들을 하나씩 올려보려고 합니다.

 

행복한 고수되십시요.

 

woojja ))*

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

 

 













저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'.NET > ASP.NET Core' 카테고리의 다른 글

[ASP.NET Core] MiddleWare  (0) 2017.07.10
[ASP.NET Core] Application Startup  (0) 2017.06.11
Posted by woojja
2017.05.31 18:08

 

안녕하셔요?

Object  instance 의 Copy 에 대해서 알아보려고 합니다.

Clone 이죠.

 

Object 를 "=" 을 사용해서 대입하면 주소값이 들어가므로 그 값들을 다른 instance로 복사하기 위한 작업입니다.

 

Key Point 는 "ICloneable" interface 를 구현한다는 것인데요.

바로 Source 를 보도록 하겠습니다.

 

 

  1. public class MyBuffer : ICloneable
  2. {
  3.     public int id;
  4.     public List<String> items;
  5.  
  6.     public MyBuffer()
  7.     {
  8.         id = 0;
  9.         items = new List<String>();
  10.     }
  11.  
  12.     public bool IsEmpty
  13.     {
  14.         get { return items.Count == 0; }
  15.     }
  16.  
  17.     public void Clear()
  18.     {
  19.         id = 0;
  20.         items = new List<String>();
  21.     }
  22.  
  23.     public MyBuffer Clone()
  24.     {
  25.         return (MyBuffer)this.MemberwiseClone();
  26.     }
  27.  
  28.     object ICloneable.Clone()
  29.     {
  30.         return Clone();
  31.     }
  32. }

 

 

이 녀석을 호출하는 것도 살펴봐야겠죠?

 

 

  1. public MyBuffer SomeFunction()
  2. {
  3.     MyBuffer myBuffer = new MyBuffer();
  4.     myBuffer.id = 0;
  5.     myBuffer.items.Add("AAA");
  6.     myBuffer.items.Add("BBB");
  7.     myBuffer.items.Add("CCC");
  8.     myBuffer.items.Add("DDD");
  9.     MyBuffer cloneBuffer = myBuffer.Clone();
  10.     myBuffer.Clear();
  11.     return cloneBuffer;
  12. }

 

 

글자 보기가 조금 그렇네요. ㅡㅡ;

Copy As Html 기능을 사용한건데 VisualStudio 테마으 글자 색을 따라가다 보니 저렇게 나오는 듯합니다.

CSS 를 한번 살펴봐야겠군요.

 

 

행복한 고수되셔요. ^^;

woojja ))*

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\













저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by woojja
TAG .NET, CLONE

오래된 Error Message 를 소개하고자 합니다. ^^;

 

"Collection was modified; enumeration operation may not execute."

 

위 Message 는 한글 에러로는

"컬렉션이 수정되었습니다. 열거 작업이 실행되지 않을 수도 있습니다." 라는 에러로 나타납니다.

 

foreach (VB.NET 의 경우 For Each) 문은 IEnumerable, IEnumerable<T> 를 구현한 배열이나 컬렉션의 요소들을 반복하여 접근하는 작업을 합니다만

For Each 반복과정에서 배열이나 Collection 의 변경이 생기는 경우 내부에서 사용하는 iterator 가 무효화 되어 사용할 수 없게되어 InvalidOperationException 이 발생하게 됩니다.

 

따라서 For Each 작업을 하기 위해서는 For 문을 사용하거나

반복에 사용할 대상을 미리 List 로 취합한뒤 그 List 를 대상으로 작업을 하시기 바랍니다.

 

 

행복한 고수되십시요.

 

woojja ))*

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

 













저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by woojja
2017.04.05 13:56

 

AutomationML 에 대한 내용을 파악하기 위한 사이트입니다.

 

AutomationML

 

https://www.automationml.org/o.red.c/dateien.html?cat=2

 

PLCOpen

 

행복한 고수되십시요.

 

woojja ))*

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

 













저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'XML' 카테고리의 다른 글

[XML] AutomationML  (0) 2017.04.05
[XML] XML ??? ... (3)  (0) 2009.03.05
[XML] XML ??? ... (2)  (0) 2009.03.05
[XML] XML ??? ... (1)  (0) 2009.03.05
Posted by woojja

 

Diagram Database importer 를 이용하면 Database 의 전체 Hirearchy를 import 하는 것이 가능하며, Database Entity 관계 다이어그램을 쉽게 생성할 수 있다.

 

Nevron Diagram 은 Table 형태의 데이터 Source 로부터 트리형태와 그래프 데이터 구조로 자동으로 가져오기 기능을 제공한다. 

Data import 기능은 DataTable, DataView, OleDbDataAdapter, SqlDataAdapter, OdbcDataAdapter, OleDbCommand, SqlCommand, OdbcCommand 등, 각 data Source 별로 지원한다.

data 가져오기 기능은 저장된 데이터 정보를 제어할 수 있도록 도와준다.

 

다음 예제는 NGraphDatasourceImporter 를 사용하는 방법을 보여주는데, 단순 Access 데이터베이스에서 데이터를 import 하여 자동으로 Graph 데이터구조로 자동 배열한다.

 

pages 테이블의 컬럼내용

 

Link 테이블의 컬럼 내용

 

자동으로 생성된 Diagram

 

C#

using Nevron.GraphicsCore;
using Nevron.Diagram;
using Nevron.Diagram.Shapes;
using Nevron.Diagram.WinForm;
using Nevron.Diagram.Layout;
using Nevron.Diagram.DataImport;
private void Form1_Load(object sender, System.EventArgs e)
{
    // View 초기화 시작 
    DrawingView.BeginInit();
  
    // View 에서 document 표시
    DrawingView.Document = DrawingDocument;
  
    // view 설정 
    DrawingView.ViewLayout = ViewLayout.Fit;
    DrawingView.Grid.Visible = false;
    DrawingView.GlobalVisibility.ShowPorts = false;
    DrawingView.HorizontalRuler.Visible = false;
    DrawingView.VerticalRuler.Visible = false;
      
    // stylesheets 생성 - one for the vertices and one for the edges
    NStyleSheet vertexStyleSheet = new NStyleSheet();
    vertexStyleSheet.Name = "Vertices";
    DrawingDocument.StyleSheets.AddChild(vertexStyleSheet);
  
    NStyleSheet edgeStyleSheet = new NStyleSheet();
    edgeStyleSheet.Name = "Edges";
    edgeStyleSheet.Style.StartArrowheadStyle = new NArrowheadStyle(ArrowheadShape.Circle, "", new NSizeL(5, 5), new NColorFillStyle(Color.Gray), new NStrokeStyle(1, Color.Black));
    edgeStyleSheet.Style.EndArrowheadStyle = new NArrowheadStyle(ArrowheadShape.Arrow, "", new NSizeL(5, 5), new NColorFillStyle(Color.Gray), new NStrokeStyle(1, Color.Black));
    DrawingDocument.StyleSheets.AddChild(edgeStyleSheet);
  
    // graph data source importer 설정 
    NGraphDataSourceImporter GraphImporter = new NGraphDataSourceImporter();
  
    // set the document in the active layer of which the shapes will be imported
    GraphImporter.Document = DrawingDocument;
  
    // set the connection string, data sources and DataAdapters
    // in this example we have created two OleDbDataAdapters: 
    // the PagesDataAdapter selects all records and columns from the Pages table of the SiteMap.mdb
    // the LinksDataAdapter selects all records and columns from the Links table of the SiteMap.mdb
    string connString = @"Data Source=""" + Application.StartupPath +
@"\SiteMap.mdb"";Provider=""Microsoft.Jet.OLEDB.4.0"";";
    OleDbDataAdapter PagesDataAdapter = new OleDbDataAdapter("SELECT * FROM Pages", connString);
    OleDbDataAdapter LinksDataAdapter = new OleDbDataAdapter("SELECT * FROM Links", connString);
  
    GraphImporter.VertexDataSource = PagesDataAdapter;
    GraphImporter.EdgeDataSource = LinksDataAdapter;
  
    // vertex records are uniquely identified by their Id (in the Pages table)
    // edges link the vertices with the FromPageId and ToPageId (in the Links table)
    GraphImporter.VertexIdColumnName = "Id";
    GraphImporter.FromVertexIdColumnName = "FromPageId";
    GraphImporter.ToVertexIdColumnName = "ToPageId";
      
    // create vertices as rectangles shapes, with default size (60, 30)
    NBasicShapesFactory shapesFactory = new NBasicShapesFactory();
    shapesFactory.DefaultSize = new NSizeF(60, 30);
    GraphImporter.VertexShapesFactory = shapesFactory;
    GraphImporter.VertexShapesName = BasicShapes.Rectangle.ToString();
  
    // set stylesheets to be applied to imported vertices and edges
    GraphImporter.VertexStyleSheetName = "Vertices";
    GraphImporter.EdgeStyleSheetName = "Edges";
  
    // layered graph layout 사용
    NLayeredGraphLayout layout = new NLayeredGraphLayout();
    layout.Direction = LayoutDirection.TopToBottom;
    layout.LayerAlignment = RelativeAlignment.Near;
    GraphImporter.Layout = layout;
  
    // subscribe for the vertex imported event,
    // which is raised when a shape was created for a data source record
    GraphImporter.VertexImported += new ShapeImportedDelegate(OnVertexImported);
  
    // 가져오기
    GraphImporter.Import();
  
    // view 초기화 끝
    DrawingView.EndInit();
  
}
  
private void OnVertexImported(NDataSourceImporter dataSourceImporter, NShape shape, INDataRecord record)
{
    // display the page title in the shape
    object text = record.GetColumnValue("Title");
    if (text == null)
    {
        shape.Text = "Title not specified";
    }
    else
    {
        shape.Text = text.ToString();
    }
  
    shape.SizeToText(new NMarginsF(10));
      
}

 

VB.NET

 

Imports Nevron.GraphicsCore
Imports Nevron.Diagram
Imports Nevron.Diagram.Shapes
Imports Nevron.Diagram.WinForm
Imports Nevron.Diagram.Layout
Imports Nevron.Diagram.DataImport
...
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ' begin view init 
    DrawingView.BeginInit()
  
    ' display the document in the view 
    DrawingView.Document = DrawingDocument
  
    ' configure the view 
    DrawingView.ViewLayout = ViewLayout.Fit
    DrawingView.Grid.Visible = False
    DrawingView.GlobalVisibility.ShowPorts = False
    DrawingView.HorizontalRuler.Visible = False
    DrawingView.VerticalRuler.Visible = False
  
    ' create two stylesheets - one for the vertices and one for the edges 
    Dim vertexStyleSheet As New NStyleSheet()
    vertexStyleSheet.Name = "Vertices"
    DrawingDocument.StyleSheets.AddChild(vertexStyleSheet)
  
    Dim edgeStyleSheet As New NStyleSheet()
    edgeStyleSheet.Name = "Edges"
    edgeStyleSheet.Style.StartArrowheadStyle = New NArrowheadStyle(ArrowheadShape.Circle, "", New NSizeL(5, 5), New NColorFillStyle(Color.Gray), New NStrokeStyle(1, Color.Black))
    edgeStyleSheet.Style.EndArrowheadStyle = New NArrowheadStyle(ArrowheadShape.Arrow, "", New NSizeL(5, 5), New NColorFillStyle(Color.Gray), New NStrokeStyle(1, Color.Black))
    DrawingDocument.StyleSheets.AddChild(edgeStyleSheet)
  
    ' configure the graph data source importer 
    Dim GraphImporter As New NGraphDataSourceImporter()
  
    ' set the document in the active layer of which the shapes will be imported 
    GraphImporter.Document = DrawingDocument
  
    ' set the connection string, data sources and DataAdapters 
    ' in this example we have created two OleDbDataAdapters:  
    ' the PagesDataAdapter selects all records and columns from the Pages table of the SiteMap.mdb 
    ' the LinksDataAdapter selects all records and columns from the Links table of the SiteMap.mdb 
    Dim connString As String = "Data Source=""" + Application.StartupPath + "\SiteMap.mdb"";Provider=""Microsoft.Jet.OLEDB.4.0"";"
    Dim PagesDataAdapter As New OleDbDataAdapter("SELECT * FROM Pages", connString)
    Dim LinksDataAdapter As New OleDbDataAdapter("SELECT * FROM Links", connString)
  
    GraphImporter.VertexDataSource = PagesDataAdapter
    GraphImporter.EdgeDataSource = LinksDataAdapter
  
    ' vertex records are uniquely identified by their Id (in the Pages table) 
    ' edges link the vertices with the FromPageId and ToPageId (in the Links table) 
    GraphImporter.VertexIdColumnName = "Id"
    GraphImporter.FromVertexIdColumnName = "FromPageId"
    GraphImporter.ToVertexIdColumnName = "ToPageId"
  
    ' create vertices as rectangles shapes, with default size (60, 30) 
    Dim shapesFactory As New NBasicShapesFactory()
    shapesFactory.DefaultSize = New NSizeF(60, 30)
    GraphImporter.VertexShapesFactory = shapesFactory
    GraphImporter.VertexShapesName = BasicShapes.Rectangle.ToString()
  
    ' set stylesheets to be applied to imported vertices and edges 
    GraphImporter.VertexStyleSheetName = "Vertices"
    GraphImporter.EdgeStyleSheetName = "Edges"
  
    ' use layered graph layout 
    Dim layout As New NLayeredGraphLayout()
    layout.Direction = LayoutDirection.TopToBottom
    layout.LayerAlignment = RelativeAlignment.Near
    GraphImporter.Layout = layout
  
    ' subscribe for the vertex imported event, 
    ' which is raised when a shape was created for a data source record 
    AddHandler GraphImporter.VertexImported, AddressOf OnVertexImported
  
    ' import 
    GraphImporter.Import()
  
    ' end view init 
    DrawingView.EndInit()
  
End Sub
  
Private Sub OnVertexImported(ByVal dataSourceImporter As NDataSourceImporter, ByVal shape As NShape, ByVal record As INDataRecord)
    ' display the page title in the shape 
    Dim text As Object = record.GetColumnValue("Title")
    If text Is Nothing Then
        shape.Text = "Title not specified"
    Else
        shape.Text = text.ToString()
    End If
  
    shape.SizeToText(New NMarginsF(10))
  
End Sub
  
Private Sub Form1_Load_1(ByVal sender As System.Object, ByVal e As System.EventArgs)
  
End Sub

 

 

위 내용은 아래 페이지를 옮겼습니다.

How to automatically create a diagram from a database?

 

 

행복한 고수되십시요.

 

woojja ))*

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\













저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by woojja