첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

728x90
반응형

■ ILogger<T> 인터페이스 : ILogger<T> 인터페이스에 종속되는 서비스 구성하기

------------------------------------------------------------------------------------------------------------------------

TestProject.zip


Services/ITestService.cs

 

 

namespace TestProject.Services

{

    /// <summary>

    /// 테스트 서비스 인터페이스

    /// </summary>

    public interface ITestService

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

 

        #region 처리하기 - Process()

 

        /// <summary>

        /// 처리하기

        /// </summary>

        void Process();

 

        #endregion

    }

}

 

 

Services/TestService.cs

 

 

using Microsoft.Extensions.Logging;

 

namespace TestProject.Services

{

    /// <summary>

    /// 테스트 서비스

    /// </summary>

    public class TestService : ITestService

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Property

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 로그 기록기 - Logger

 

        /// <summary>

        /// 로그 기록기

        /// </summary>

        public ILogger<TestService> Logger { get; set; }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - TestService()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public TestService()

        {

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 처리하기 - Process()

 

        /// <summary>

        /// 처리하기

        /// </summary>

        public void Process()

        {

            Logger?.LogInformation("TEST SERVICE PROCESS");

        }

 

        #endregion

    }

}

 

 

Startup.cs

 

 

using Microsoft.AspNetCore.Builder;

using Microsoft.AspNetCore.Hosting;

using Microsoft.Extensions.Configuration;

using Microsoft.Extensions.DependencyInjection;

using Microsoft.Extensions.Hosting;

using Microsoft.Extensions.Logging;

 

using TestProject.Services;

 

namespace TestProject

{

    /// <summary>

    /// 시작

    /// </summary>

    public class Startup

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Property

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 구성 - Configuration

 

        /// <summary>

        /// 구성

        /// </summary>

        public IConfiguration Configuration { get; }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - Startup(configuration)

 

        /// <summary>

        /// 생성자

        /// </summary>

        /// <param name="configuration">구성</param>

        public Startup(IConfiguration configuration)

        {

            Configuration = configuration;

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 서비스 컬렉션 구성하기 - ConfigureServices(services)

 

        /// <summary>

        /// 서비스 컬렉션 구성하기

        /// </summary>

        /// <param name="services">서비스 컬렉션</param>

        public void ConfigureServices(IServiceCollection services)

        {

            services.AddSingleton<ITestService>

            (

                (container) =>

                {

                    ILogger<TestService> logger = container.GetRequiredService<ILogger<TestService>>();

 

                    return new TestService() { Logger = logger };

                }

            );

 

            services.AddControllersWithViews();

        }

 

        #endregion

        #region 구성하기 - Configure(app, environment)

 

        /// <summary>

        /// 구성하기

        /// </summary>

        /// <param name="app">애플리케이션 빌더</param>

        /// <param name="environment">웹 호스트 환경</param>

        public void Configure(IApplicationBuilder app, IWebHostEnvironment environment)

        {

            if(environment.IsDevelopment())

            {

                app.UseDeveloperExceptionPage();

            }

            else

            {

                app.UseExceptionHandler("/Home/Error");

 

                app.UseHsts();

            }

 

            app.UseHttpsRedirection();

 

            app.UseStaticFiles();

 

            app.UseRouting();

 

            app.UseAuthorization();

 

            app.UseEndpoints

            (

                endpoints =>

                {

                    endpoints.MapControllerRoute

                    (

                        name    : "default",

                        pattern : "{controller=Home}/{action=Index}/{id?}"

                    );

                }

            );

        }

 

        #endregion

    }

}

 

 

Controllers/TestController.cs

 

 

using Microsoft.AspNetCore.Mvc;

 

using TestProject.Services;

 

namespace TestProject.Controllers

{

    /// <summary>

    /// 테스트 컨트롤러

    /// </summary>

    public class TestController : Controller

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Field

        ////////////////////////////////////////////////////////////////////////////////////////// Private

 

        #region Field

 

        /// <summary>

        /// 서비스

        /// </summary>

        private ITestService service;

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - TestController(service)

 

        /// <summary>

        /// 생성자

        /// </summary>

        /// <param name="service">서비스</param>

        public TestController(ITestService service)

        {

            this.service = service;   

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 인덱스 페이지 처리하기 - Index()

 

        /// <summary>

        /// 인덱스 페이지 처리하기

        /// </summary>

        /// <returns>액션 결과</returns>

        public IActionResult Index()

        {

            this.service.Process();

 

            return View();

        }

 

        #endregion

    }

}

 

------------------------------------------------------------------------------------------------------------------------

728x90
반응형
Posted by 사용자 icodebroker

댓글을 달아 주세요