ASP.NET MVC 에서 Ninject 를 사용 하 는 방법 튜 토리 얼

4849 단어 asp.netmvcninject
왜 Ninject 를 써 요?
많은 다른 유형의 IOC 용 기 는 설정 파일 에 지나치게 의존 하여 항상 설정 합 니 다.기분 이 좋 지 않 습 니 다.또한 assembly-qualified 이름(즉,유형의 전체 이름)을 사용 하여 정 의 를 내 려 야 합 니 다.조금 만 주의 하지 않 으 면 오 자 를 쳐 서 프로그램 전 체 를 무 너 뜨 릴 수 있 습 니 다.Ninject 는 번개,초 경량급 과 같은.Net 플랫폼 을 기반 으로 하 는 IOC 용기 로 주로 프로그램 에서 모듈 의 결합 문 제 를 해결 하 는 데 사용 되 는데 그 목적 은 최소 설정 을 하 는 데 있다.따라서 설정 을 좋아 하지 않 고 중량급 IOC 프레임 워 크 를 좋아 하지 않 는 다 면 작은 애플 Ninject 를 사용 하 세 요!
Ninject 는 번개 처럼 빠 른 경량급...주입 프레임 워 크 에 의존 합 니 다.으 으 으,거의 사용 되 지 않 는 것 같 습 니 다.Ninject 는 DI 용기 입 니 다.역할 은 ASP.NET MVC 프로그램의 구성 요 소 를 결합 하 는 것 입 니 다.결합 을 해제 하 는 데 도 다른 방식 이 있 습 니 다.예 를 들 어 인터페이스 등 입 니 다.

public interface ITest
{
 Decimal ValueProducts(IEnumerable<Product>products) ;
}
public class Test:ITest
{
 public Decimal ValueProducts(IEnumerable<Product>products) 
 {
 return products.sum(p=>p.Price);
 }
}
public class ShoppingCart
{
 private ITest test;
 public IEnumerable<Product>products{set;get;}
 public ShoppingCart( ITest test)
 {
 this.test=test;
 }
 public Decimal result(products);
}
인 터 페 이 스 를 통 해 우리 가 원 하 는 결과,즉 쇼핑 과 Test 간 의 결합 이 라 고 할 수 있다.하지만 컨트롤 러 에 서 는 그 목적 을 이 룰 수 없 었 다.

public ActionResult Index(){
 ITest IT=new Test();
 ShoppingCart cart=new ShoppingCart(IT);{Products=products};
 Decimal total=IT.result();
 return View(total);
}
저 희 는 Ninject 의 도움 을 받 아서 이 루어 질 수 밖 에 없어 요.
nuget 으로 다 운 받 을 수도 있 고 Ninect 로 다 운 받 을 수도 있어 요.
그렇다면 우 리 는 어떻게 Ninject 를 사용 하여 상술 한 문 제 를 해결 해 야 합 니까?
사실 Ninect 를 사용 하 는 것 은 어렵 지 않 습 니 다.모두 세 단계 입 니 다.

//    
public ActionResult Index()
{
 1:    Ninject   
 IKernel ninject=new StandardKernel();
 2:    Ninject  ,                 
 ninject.Bind<ITest>().To<Test>();
 3:        Ninject       
 ITest IT=ninject.Get<ITest>();
}
커 널 을 만 드 는 것 부터 대상 을 만 드 는 것 까지 Spring.Net 과 비슷 합 니 다.
강박 증 이 좀 있 나 봐 요.이 덩어리 를 거기에 두 면 눈 에 거 슬 려 요.동작 마다 이 덩어리 를 쓰 라 고 할 수 는 없 잖 아 요.물론 아니에요.
다음은 의존 항목 해석 기 를 만 듭 니 다.

public class NinjectResolver:IDependencyResolver
{
 private IKernel kernel;
 public NinjectResolver(IKernel kernel)
 {
 this.kernel=kernel; 
 AddBinding();
 }
 public IEnumerable<Object> GetServices(Type serviceType)
 {
 return kernel.GetAll(serviceType);
 }
 public Object GetService(Type serviceType)
 {
 return kernel.TryGet(serviceType);
 } 
 void AddBinding()
 {
 kernel.Bind<ITest>().To<Test>();
 }
}
IDependency Resolver 이것 은 System.Mvc 의 계승 입 니 다.이 인 터 페 이 스 는 GetServices 와 GetService 를 실현 해 야 합 니 다.AddBinding 이라는 방법 은 실현 클래스 와 인 터 페 이 스 를 연결 하 는 데 사 용 됩 니 다.
GetService 방법 중의 TryGet 은 위의 Get 과 유사 합 니 다.적당 한 바 인 딩 이 없 을 때 이것 은 null 값 을 되 돌려 줍 니 다.이상 을 버 리 지 않 습 니 다.GetServices 방법 중의 GetAll 은 단일 유형의 여러 바 인 딩 에 사용 할 수 있 습 니 다.
마지막 단 계 는 앱이 폴 더 에서 NinjectWebCommon.cs 파일 을 찾 은 다음 RegisterServices(IKernel kernel)를 찾 습 니 다.
이때 우 리 는 컨트롤 러 의 코드 를 수정 했다.

private ITest test;
public HomeController(ITest test)
{
 this.test=test;
}
public ActionResult Index(){
 ShoppingCart cart=new ShoppingCart(IT);{Products=products};
 Decimal total=IT.result(); return View(total);
}
Ninject 의 대략적인 용법 도 많 지 않 습 니 다.다음 에 말 할 때 Ninject 는 비교적 새로운 것 입 니 다.
속성 이나 구조 함수 의 값 을 지정 하 는 것 입 니 다.사실 아무것도 아 닙 니 다.WithConstructor Argument 와 WithProperty Value 두 가지 사용 만 있 습 니 다.

public interface IHelper
 {
 Decimal ApplyDiscount(Decimal totalParam); 
 }
 public class Helper : IHelper
 {
 public Decimal DiscountSize { set; get; } 
 
 public decimal ApplyDiscount(decimal totalParam)
 {
 return (totalParam - (discountparam / 100m * totalParam));
 }
 }

private void AddBindings()
 {
 kernel.Bind<ITest>().To<Test>();
 
 kernel.Bind<IHelper>().To<Helper>().WithPropertyValue("DiscountSize", 50M); kernel.Bind<IHelper>().To<Helper>().WithConstructorArgument("discountparam", 50M);
 }
WithProperty Value 이 매개 변 수 는 두 가지 가 있 는데 하 나 는 속성 명 이 고 하 나 는 속성 값 입 니 다.이렇게 하면 처음부터 이 속성 에 기본 값 을 부여 할 수 있 습 니 다.개인 적 인 느낌 작용 이 크 지 않 고 다른 방법 도 같은 효 과 를 실현 할 수 있 습 니 다.
WithConstructor Argument 이것 도 차이 가 많 지 않 습 니 다.매개 변 수 는 구조 함수 의 형 삼 이 고 뒤의 매개 변 수 는 값 입 니 다.
자,Ninject 는 여기까지 소 개 했 습 니 다.잘못 되 었 다 면 널리 양해 해 주 십시오.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기