본문 바로가기
C#/ASP.NET

DI

by hoshi03 2024. 10. 5.

클래스 라이브러리로 data, service 등의 로직을 분리할 클래스를 만들고

해당 클래스끼리 솔루션 탐색기에서 필요한 인터페이스와 참조성을 추가해준다

 

기존에는 mvc 프로젝트 안에서 model, view, controller를 모두 가지고 잇는 형태에서

 

데이터 프로젝트

서비스 프로젝트

웹 프로젝트 

3개의 클래스로 분화시켰고

 

데이터 프로젝트에 데이터모델 폴더-user, 뷰 모델 폴더-로그인 정보

서비스 프로젝트에 인터페이스 폴더 - 유저 정보 체크 인터페이스를 작성, 서비스 폴더 - 유저서비스에서 로그인 체크

웹 프로젝트의  컨트롤러에서는 바뀐 인터페이스와 로그인 데이터 모델을 참조해서 사용하게 바꿨다

 

웹 프로젝트에 뷰에서는 기존에는 모델을 바로 가져왓으나 구조를 위처럼 바꿧기에 cshtml에@using MVC.Data.ViewModels 형태로 사용할 수는 잇지만, 할때마다 cshtml을 수정하는건 비효율적이기에 

뷰 폴더의 _ViewImports.cshtml에 using을 추가해주면 거기서 임포트해서 사용할 수 있다

 

@using MVC.Web
@using MVC.Data.ViewModels

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

 

_layout.cshtml 수정

 

레이아웃의 바디 부분의 컨트롤러와 액션을 수정해서 

멤버쉽 페이지의 메인과 로그인 화면으로 바로 갈 수 있게 했다

			<li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-controller="Membership" asp-action="Index">Membership</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-controller="Membership" asp-action="Login">Login</a>
                        </li>

 

 

• 의존성 주입

 

컨트롤러에서 서비스 객체를 new로 선언해서 가져오는 방식이 아닌 생성자 주입 방식을 사용하자

 

private IUser _user = new UserService();

기존에는 이렇게 인터페이스와 구현체를 컨트롤러에서 직접 선언했지만

 

StartUp.cs의 ConfigureServices 메서드를 수정해준다

AddScopped 메서드에 <인터페이스, 구현체> 형태로 넣어주고

		public void ConfigureServices(IServiceCollection services)
		{
			// IUser 인터페이스에 UserService 주입
			services.AddScoped<IUser, UserService>();
			services.AddControllersWithViews();
		}

 

컨트롤러에서는 인터페이스 선언만 하고 생성자로 의존성 주입이 가능하게 했다다

		private IUser _user;

		//생성자 의존성 주입
		public MembershipController(IUser user)
		{
			_user = user;
		}

 

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

데이터베이스 연동 code first 방식  (0) 2024.10.06
MVC 프로젝트 시작하기  (0) 2024.10.05