[ASP.NET Core MVC] 19-20. MVC5에서 Unity Container를 이용한 DI, appsettings.json를 통한 ConnectionString 처리 정리

BruteForceA·2022년 7월 6일
1
post-thumbnail

개발환경

  • Visual Studio Community 2017
  • ASP.NET Core 2.2



MVC5에서 Unity Container를 이용한 Dependency Injection

Unity Container : MS에서 만든 IoC컨테이너 .NET

이전에 했던 MVC6에서는 Startup.cs에 IoC컨테이너가 내장되어있어 객체를 주입할수 있었는데 MVC5에는 MS에서 만든 IoC컨테이너 Unity Container를 사용하여 의존성 주입을 하는 방법이 있다.




appsettings.json를 통한 ConnectionString 처리하기

INoticeDal.cs


using Note.Model;
using System.Collections.Generic;

namespace Note.IDAL
{
    public interface INoticeDal
    {

        /// <summary>
        /// 1. 공지사항 게시물 리스트 출력
        /// </summary>
        /// <returns></returns>
        List<Notice> GetNoticeList();

        /// <summary>
        ///  2. 공지사항 상세 출력
        /// </summary>
        /// <param name="noticeNo"></param>
        /// <returns></returns>
        Notice GetNotice(int noticeNo);

        /// <summary>
        /// 3. 공지사항 등록
        /// </summary>
        /// <param name="notice"></param>
        /// <returns></returns>
        bool PostNotice(Notice notice);

        /// <summary>
        /// 4. 공지사항 수정
        /// </summary>
        /// <param name="notice"></param>
        /// <returns></returns>
        bool UpdateNotice(Notice notice);

        /// <summary>
        /// 5. 공지사항 삭제
        /// </summary>
        /// <param name="noticeNo"></param>
        /// <returns></returns>
        /// bool DeleteNotice(Notice notice); 객체를 넘겨줄 수  도 있다.
        bool DeleteNotice(int noticeNo);
        


    }
}



NoticeDal.cs


using Microsoft.Extensions.Configuration;
using Note.DAL.DataContext;
using Note.IDAL;
using Note.Model;
using System;
using System.Collections.Generic;
using System.Linq;

namespace Note.DAL
{
    public class NoticeDal : INoticeDal
    {
        private readonly IConfiguration _configuration;

        public NoticeDal(IConfiguration configuration)
        {
            _configuration = configuration;
        }

    /// <summary>
    /// 1. 공지사항 게시물 리스트 출력
    /// </summary>
    /// <returns></returns>
    public List<Notice> GetNoticeList()
    {
            using (var db = new NoteDbContext(_configuration)) 
            {
                return db.Notices
                    .OrderByDescending(n=>n.NoticeNo)
                    .ToList();
            }
    }

    /// <summary>
    ///  2. 공지사항 상세 출력
    /// </summary>
    /// <param name="noticeNo"></param>
    /// <returns></returns>
    public Notice GetNotice(int noticeNo)
    {
        throw new NotImplementedException();
    }

    /// <summary>
    /// 3. 공지사항 등록
    /// </summary>
    /// <param name="notice"></param>
    /// <returns></returns>
    public bool PostNotice(Notice notice)
    {
        throw new NotImplementedException();
    }


    /// <summary>
    /// 4. 공지사항 수정
    /// </summary>
    /// <param name="notice"></param>
    /// <returns></returns>
    public bool UpdateNotice(Notice notice)
    {
        throw new NotImplementedException();
    }

    /// <summary>
    /// 5. 공지사항 삭제
    /// </summary>
    /// <param name="noticeNo"></param>
    /// <returns></returns>
    /// bool DeleteNotice(Notice notice); 객체를 넘겨줄 수  도 있다.
    public bool DeleteNotice(int noticeNo)
    {
        throw new NotImplementedException();
    }
    }
}

NoticeBll.cs

using Note.IDAL;
using Note.Model;
using System;
using System.Collections.Generic;

namespace Note.Bll
{
    public class NoticeBll 
    {
        private readonly INoticeDal _noticeDal;

        public NoticeBll(INoticeDal noticeDal)
        {
            _noticeDal = noticeDal;
        }

        /// <summary>
        /// 1. 공지사항 게시물 리스트 출력
        /// </summary>
        /// <returns></returns>
        public List<Notice> GetNoticeList()
        {
            return _noticeDal.GetNoticeList();
        }

        /// <summary>
        ///  2. 공지사항 상세 출력
        /// </summary>
        /// <param name="noticeNo"></param>
        /// <returns></returns>
        public Notice GetNotice(int noticeNo)
        {
            if (noticeNo <= 0) throw new ArgumentException();
            return _noticeDal.GetNotice(noticeNo);
        }

        /// <summary>
        /// 3. 공지사항 등록
        /// </summary>
        /// <param name="notice"></param>
        /// <returns></returns>
        public bool PostNotice(Notice notice)
        {
            if (notice == null) throw new ArgumentNullException();
            return _noticeDal.PostNotice(notice);
        }


        /// <summary>
        /// 4. 공지사항 수정
        /// </summary>
        /// <param name="notice"></param>
        /// <returns></returns>
        public bool UpdateNotice(Notice notice)
        {
            if (notice == null) throw new ArgumentNullException();
            return _noticeDal.UpdateNotice(notice);
        }

        /// <summary>
        /// 5. 공지사항 삭제
        /// </summary>
        /// <param name="noticeNo"></param>
        /// <returns></returns>
        /// bool DeleteNotice(Notice notice); 객체를 넘겨줄 수  도 있다.
        public bool DeleteNotice(int noticeNo)
        {
            if (noticeNo <= 0) throw new ArgumentNullException();
            return _noticeDal.DeleteNotice(noticeNo);
        }
    }
}



Startup.cs



NoteDbContext.cs

appsettings.json

DB정보 같은 민감 정보들은 C#코드에 직접 작성하지 않고
appsetting.json에 DB정보들을 적는걸 권장한다.

Startup.cs

NoteDbContext.cs

NoteDal.cs




참조

0개의 댓글