2014-09-09 2 views
0

나는 Rebus를 사용하고 있습니다.AutoFac으로 개체에 등록

builder.Register(a => MessageContext.GetCurrent()).ExternallyOwned(); 

어떻게 설정 내에 messageHandler 생성자가 Autofac 다시 이런 종류의를 찾을 수 할 수 있도록 다음 AutofacContainerAdapter (https://github.com/rebus-org/Rebus/blob/master/src/Rebus.Autofac/AutofacContainerAdapter.cs)에서 그들은 다음 코드 줄을 호출? 올바르게 이해한다면 IMessageContext을 생성자로 사용할 때 위의 코드에 .As<IMessageContext>()이 없기 때문에 전달되지 않습니다. https://github.com/rebus-org/Rebus/blob/master/src/Rebus/MessageContext.cs 쇼 : 보면

+0

하지만'GetCurrent()'는'IMessageContext'를 반환합니다. 자동으로 자동 등록되도록하지는 않습니까? – mookid8000

+0

실제로 IMessageContext입니다. 제 생성자에 다른 매개 변수가 있습니다. 단위 테스트에 IMessageContext가 필요하므로 MessageContext.GetCurrent()를 사용할 수 없습니다. 아니면 내가 할 수 있니? 유닛 테스트를 위해 – dampee

+0

당신이하려고하는 것처럼'IMessageContext'를 주입하는 것이 좋습니다. 그러나'MessageContext.GetCurrent()'에 의해 반환 될 가짜를 설정하는 데 사용할 수있는'FakeMessageContext'라는 것이 있습니다. 그래서 그것은 가능합니다 - 그것을 삽입하는 것이 더 쉽습니다 (그리고 더 나은 코드 디자인 IMO) : – mookid8000

답변

1

public static IMessageContext GetCurrent() 
{ 
} 

그래서 IMessageContext로 등록이. 명시 적으로 명시하지 않으면 람다 등록이 암시 적으로 람다의 반환 유형으로 등록됩니다.

관련 문제