2012-06-10 6 views
4

나는 최근에 Ninject를 사용하여 시작한 WinForms 응용 프로그램을 가지고 있습니다. Ninject에 대한 자습서의 대부분은이 같은 autowiring에 대한 설정을 보여Ninject로 Autowiring

당신이 짧은 스크립트 시작시 클래스를 구현하는하려는 경우 중대하다,하지만 난에 그 객체를 사용하는 방법을 잘 모르겠어요
using (IKernel kernel = new StandardKernel()) 
{ 
    kernel.Bind<ITaxCalculator>() 
     .To<TaxCalculator>() 
     .WithConstructorArgument("rate", .2M); 

    var tc = kernel.Get<ITaxCalculator>(); 
    Assert.Equal(20M, tc.CalculateTax(100M)); 
} 

응용 프로그램 내 다른 클래스 및 라이브러리. Ninject가 this article에서 Spring과 유사한 종속성을 처리 할 수 ​​있는지 궁금했습니다.

package testbean; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 

import writer.IWriter; 

@Service 
public class MySpringBeanWithDependency { 
    private IWriter writer; 

    @Autowired 
    public void setWriter(IWriter writer) { 
     this.writer = writer; 
    } 

    public void run() { 
     String s = "This is my test"; 
     writer.writer(s); 
    } 
} 

그러면 XML에서 IWriter에 삽입 할 인스턴스를 지정할 수 있습니다. 그런 다음 코드를 실행하려면이 모든 것을이 필요하다 : 당신이 당신의 응용 프로그램의 나머지 부분에 활용하는 방법에 대해 걱정할 필요가 없습니다

스프링
package main; 

import org.springframework.beans.factory.BeanFactory; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

import testbean.MySpringBeanWithDependency; 

public class Main { 
    public static void main(String[] args) { 
     ApplicationContext context = new ClassPathXmlApplicationContext("META- INF/beans.xml"); 
     BeanFactory factory = context; 
     MySpringBeanWithDependency test = (MySpringBeanWithDependency) factory 
       .getBean("mySpringBeanWithDependency"); 
     test.run(); 
    } 
} 

, 그것은 자동으로 IWriter 의존성을 만들어 삽입 할 수 . 현재 Ninject 자습서를 사용하여이 작업을 수행 할 수있는 방법을 찾을 수 없었으며 객체를 다른 객체에 저장 한 다음 호출하는 것이 가장 좋은 방법은 아닙니다.

Ninject와 종속성을 자동으로 줄이는 방법에 대한 고수와 저조한 모습을 보였지만이 특정 질문에 대한 답을 찾지 못했습니다. 어떤 도움이라도 대단히 감사합니다.

답변

4

선호하는 방법은 생성자 주입을

public class MySpringBeanWithDependency { 
    private IWriter writer; 

    public MySpringBeanWithDependency(IWriter writer) { 
        this.writer = writer; 
    } 

    public void run() { 
        String s = "This is my test"; 
        writer.writer(s); 
    } 
} 

Kernel.Bind<IWriter>().To<SomeWriter>(); 
Kernel.Get<MySpringBeanWithDependency>(); 

대신 당신이 당신의 바인딩

https://github.com/ninject/ninject.extensions.conventions/wiki/What-is-configuration-by-convention을 지정 규칙을 사용합니다 그리고 당신은 훨씬 더 큰 조건을 생각하고 가야 위와 같이 하나의 바인딩에 의해 하나를 수행하는 것입니다 가능한 한 응용 프로그램 시작시 한 번만 얻으십시오.

+0

도움 주셔서 감사합니다. 확장 DLL을 확인합니다. – Rachael

관련 문제