ASP.NET MVC 에서 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 는 여기까지 소 개 했 습 니 다.잘못 되 었 다 면 널리 양해 해 주 십시오.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
작업 중 문제 해결 - (win 2003 asp. net) Session 과 페이지 전송 방법 으로 해결 방안 을 정상적으로 사용 할 수 없습니다.또한 F 는 처음에 우리 의 BP & IT 프로젝트 팀 이 Forms 폼 검증 을 사용 했다 고 판단 할 수 있 습 니 다. 페이지 를 뛰 어 넘 는 것 은http://hr.bingjun.cc/MyTask/MyTas...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.