6

확인 어쩌면 캐슬 윈저에 대한 정보가 너무 많아서이 키워드를 찾는 것이 모든 것을 보여주기 때문에 솔직하게 나는 그것이 어떻게 작동하는지 충분히 이해하지 못합니다. 이 문제를 올바르게 해결하십시오. 나는이 시점에서 운이 거의없는 많은 순열을 시도했다. 캐슬 윈저 IoC 속성 주입 간단한 방법

내가

내가 싱글로 인스턴스화하려는 IUnitOfWorkFactory 있습니다.

iocContainer = new WindsorContainer() 
    .Install(FromAssembly.This()); 

var propInjector = iocContainer.Register(
    Component.For<IUnitOfWorkFactory>() 
    .LifestyleSingleton() 
    .Instance(new NHUnitOfWorkFactory()) 
    ); 

propInjector.Resolve<IUnitOfWorkFactory>(); 

이 나의 Application_Start 방법에서 호출되는 : 그래서, 그래서 다음과 같은 코드의 비트 쓰기, 성 윈저를 설치합니다.

내가

지금처럼 유선 AccountController 있습니다

public class AccountController : SecureController 
{ 
    public IUnitOfWorkFactory UnitOfWorkFactory { get; set; } 
    ... 

... 지금까지 내가 이해할 수있는,이해야 그냥 "작업"(어떻게 나 한테 물어하지는 않지만). 하지만 내 속성은 내가 그것을 사용하려고하면 항상 null입니다.

뭔가 바보 같은 간단한 누락 것 같다,하지만 난 그게 무엇인지 전혀 모른다.

나는 또한 성공하지

var propInjector = iocContainer.Register(
    Component.For<IUnitOfWorkFactory>() 
    .ImplementedBy<NHUnitOfWorkFactory>() 
    .LifestyleSingleton() 
    ); 

을 시도했습니다.

내가 뭘 잘못하고 있니?

결론

나는 여기에 몇 가지 단계를 누락되었습니다. tutorial에 따라 설치 프로그램과 부트 스트 래퍼를 만들었지 만 제어기 팩토리를 만들기 전에 잘못된 지점에 서비스를 등록했습니다.

+0

당신이 컨트롤러를 등록 있나요? –

+0

... 생성자 종속성 주입에만 필요하지 않습니까? 아마 나는 이것이 어떻게 작동해야하는지 오해한다. –

+0

아니요, 컨테이너는 개체 그래프의 루트를 만들어야합니다. 이 경우 컨트롤러. 이는 Property 또는 Constructor 주입의 경우입니다 (동일한 방식으로 작동하기 때문입니다). 그 공 회전을 얻는다 무엇 (http://docs.castleproject.org/Default - 당신이 사이트에있는 윈저의 예를 보면 –

답변

6

모두 생성자와 재산 ... 지금은 단지 다른 87 문제를 디버깅 할 필요가 ....

iocContainer = new WindsorContainer() 
    .Install(FromAssembly.This()); 

var controllerFactory = new WindsorControllerFactory(iocContainer.Kernel); 
ControllerBuilder.Current.SetControllerFactory(controllerFactory); 

iocContainer.Register(
    Component.For<IUnitOfWorkFactory>() 
    .ImplementedBy<NHUnitOfWorkFactory>() 
    .LifestyleSingleton() 
    ); 

... 그리고 내 재산 주사는 더 이상 널 없었다 : 이제 내 부트 스트 래퍼는 다음과 같습니다 주입 객체는 컨테이너에 의해 루트 객체가 해석 될 때 수행됩니다. 이 경우, AccountController은 Windsor가 작성해야하는 루트 오브젝트입니다. 위해

당신은 controller factory를 사용해야합니다,이를 연결할 수 있습니다. 콘트롤러가 등록되고 컨테이너에 의해 해결되면, 모든 것이 예상대로 작동해야합니다.

+0

사실 그것은 처음에 내가 시작한 튜토리얼이었고, 이미이 컨트롤러 팩토리를 만들었습니다 ...하지만 이것은 아무 것도하지 않는 것 같습니다.설치 프로그램도 있습니다 ... 아직 아무것도 없습니다. –

+0

OK,이 글과 Charleh의 코멘트는 내가 잘못하고있는 것에 나를 덧붙였다. 나는 내 질문에 그것을 쓸 것이다. 감사! –