DependencyResolver 설정
우선, DI 컨테이너를 연결하기 위해 DependencyResolver를 설정해야 한다. 이를 위해 프로젝트에 DependencyResolver.cs라는 파일을 생성하자.
namespace SportsStore.WebUI.Infrastructure
{
public class NinjectDependencyResolver : IDependencyResolver
{
private IKernel kernel;
public NinjectDependencyResolver(IKernel kernel)
{
this.kernel = kernel;
AddBindings();
}
public object GetService(Type serviceType)
{
return kernel.TryGet(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return kernel.GetAll(serviceType);
}
private void AddBindings() {
// 바인딩 정보 입력
}
}
}
Domain 모델 정의
예를 들어, SportsStore.Domain.Entities 네임스페이스 안에 Product 클래스를 추가했다고 가정해보자. 이 클래스는 다음과 같은 속성을 가진다:
namespace SportsStore.Domain.Entities
{
public class Product
{
public int ProductID { get; set; }
public string Name { get; set;}
public string Description { get; set;}
public decimal Price { get; set;}
public string Category { get; set; }
}
}
DI 컨테이너 등록
.NET MVC에서 Ninject와 같은 DI 컨테이너를 사용하여 의존성 해결자를 설정할 수 있다. Ninject를 사용하는 경우, App_Start 폴더의 NinjectWebCommon.cs 파일을 수정해야 한다.
NinjectWebCommon.cs 수정
다음은 의존성 등록을 위해 NinjectWebCommon.cs 파일의 하단을 수정하는 코드이다:
private static void RegisterServices(IKernel kernel)
{
// MVC 프레임워크와 DI 컨테이너를 연결
System.Web.Mvc.DependencyResolver.SetResolver(
new SportsStore.WebUI.Infrastructure.NinjectDependencyResolver(kernel));
}
위 코드는 SportsStore.WebUI.Infrastructure.NinjectDependencyResolver를 통해 MVC 프레임워크와 DI 컨테이너 간의 연결 고리를 구성한다. 이렇게 하면 컨트롤러와 같은 MVC 구성 요소에 필요한 의존성을 DI 컨테이너에서 자동으로 주입할 수 있다.
의존성 주입 설정 완료
이제 MVC 프레임워크와 DI 컨테이너 간의 연결이 완료되었다. 이를 통해 MVC 컨트롤러 또는 다른 클래스에 필요한 개체를 자동으로 주입받을 수 있다. 예를 들어, ProductController에서 ProductRepository를 주입받는 구조로 변경하면 코드가 더욱 깔끔해진다.
추가 팁
- Ninject 외에 다른 DI 컨테이너(예: Autofac, Unity)를 사용하는 경우에도 비슷한 방식으로 설정할 수 있다.
- 의존성 주입을 사용하면 코드의 유지보수성과 확장성이 크게 향상된다. 앞으로 컨트롤러의 의존성을 생성자 주입 방식으로 리팩토링하는 것도 추천한다.
'사이드 프로젝트 > SportsStore (ASP.NET MVC5)' 카테고리의 다른 글
[ASP.NET Project] 도메인 모델 작성하기 (0) | 2024.12.03 |
---|---|
[ASP.NET Project] ASP.NET MVC5를 이용한 SportsStore 응용 프로그램 생성하기 (1) | 2024.11.26 |