는 I는 DLL 느릅이 라이브러리 내의DbContext 만들지
public class MyDbContext {
[...]
}
같은 형식을 노출이 또한
public void RegisterServices(Container container) {
container.Register<MyDbContext>(Lifestyle.Scoped);
}
이 어셈블리와 같은 용기 내의 MyDbContext
를 등록 IPackage
구현을 다음 두 가지 유형의 응용 프로그램에서 참조됩니다. - 웹 API 프로젝트 - asp.net mvc 응용 프로그램
이 웹 API 프로젝트
var container = new Container();
container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();
InitializeContainer(container);
container.RegisterWebApiControllers(GlobalConfiguration.Configuration);
container.Verify();
의 초기화 내가합니다 (MVC 응용 프로그램에서)는 수수께끼 큐에서 메시지를받을 때 이것은 MVC 응용 프로그램
var container = new Container();
container.Options.DefaultScopedLifestyle = new WebRequestLifestyle();
InitializeContainer(container);
container.RegisterMvcControllers(Assembly.GetExecutingAssembly());
container.Verify();
의 초기화이다 컨테이너는이
public class MyHandler : BaseMessageHandler, IHandleMessages<MyMessage>, IHandleMessages<IFailed<MyMessage>>
{
public MyHandler(ILog logger, MyDbContext context) {
_logger = logger;
_context = context;
}
}
같은 메시지 처리기를 인스턴스화 할 시도하지만
말하는 오류가 발생Rebus.Retry.ErrorTracking.InMemErrorTracker - 처리되지 않은 예외 ID의 1 동안 85feff07-01a6-4195-8deb-7c8f1b62ecc3과 메시지 처리 : SimpleInjector.ActivationException을 다음 MyDbContext '는 웹 요청'생활로 등록되지만 인스턴스이다 활성 (웹 요청) 범위의 컨텍스트 외부에서 요청했습니다. 다음 스택 추적
at SimpleInjector.Scope.GetScopelessInstance[TImplementation](ScopedRegistration`1 registration) at SimpleInjector.Scope.GetInstance[TImplementation](ScopedRegistration`1 registration, Scope scope) at SimpleInjector.Advanced.Internal.LazyScopedRegistration`1.GetInstance(Scope scope) at lambda_method(Closure) at SimpleInjector.InstanceProducer.GetInstance() at SimpleInjector.Container.GetInstance[TService]()
나는 또한 MVC 응용 프로그램의 설정에 비동기 범위가 지정된 라이프 스타일을 시도했지만 오류가 실질적으로 동일과
.
안녕하세요, 스티븐, 답장을 보내 주셔서 감사합니다.MessageHandler에 어떤 수정을해야하는지 명확히 설명해 주시겠습니까? 사실 저는 단순히 핸들러를'container.Register, MyMessageHandler> (Lifestyle.Transient)'로 등록합니다. 나는 그것을 바꿔야 할까? –
Lorenzo
안녕하세요 @ Lorenzo, 귀하의 메시지 처리기 또는 등록을 변경할 필요가 없습니다; 그것은 Rebus가 제공하는 잘 디자인 된 추상화와 결합 된 Simple Injector의 아름다움입니다. 마지막 데코레이터로 데코레이터를 등록하면 (더 많이 가지고 있다면) 그냥 작동하기 시작해야합니다. – Steven
좋은 품질의 대답. 감사합니다! – Lorenzo