C# 4.0 NServiceBus无法处理消息:请求的服务';NServiceBus.Impersonation.ExtractIncomingPrincipal';尚未注册

C# 4.0 NServiceBus无法处理消息:请求的服务';NServiceBus.Impersonation.ExtractIncomingPrincipal';尚未注册,c#-4.0,.net-4.0,nservicebus,C# 4.0,.net 4.0,Nservicebus,在试图处理消息时,将NServiceBus 4.0.3与NHibernate 3.3.1一起使用时,我收到一个错误 INFO NServiceBus.Unicast.Transport.TransportReceiver [(null)] <(null)> - Failed to process message Autofac.Core.Registration.ComponentNotRegisteredException: The requested service '

在试图处理消息时,将NServiceBus 4.0.3与NHibernate 3.3.1一起使用时,我收到一个错误

    INFO  NServiceBus.Unicast.Transport.TransportReceiver [(null)] <(null)> - Failed to process message
Autofac.Core.Registration.ComponentNotRegisteredException: The requested service 'NServiceBus.Impersonation.ExtractIncomingPrincipal' has not been registered. To avoid this exception, either register a component to provide the service, check for service registration using IsRegistered(), or use the ResolveOptional() method to resolve an optional dependency.
   at NServiceBus.Unicast.Transport.TransportReceiver.ProcessMessage(TransportMessage message) in c:\BuildAgent\work\d4de8921a0aabf04\src\NServiceBus.Core\Unicast\Transport\TransportReceiver.cs:line 353
   at NServiceBus.Unicast.Transport.TransportReceiver.TryProcess(TransportMessage message) in c:\BuildAgent\work\d4de8921a0aabf04\src\NServiceBus.Core\Unicast\Transport\TransportReceiver.cs:line 233
   at NServiceBus.Transports.Msmq.MsmqDequeueStrategy.ProcessMessage(TransportMessage message) in c:\BuildAgent\work\d4de8921a0aabf04\src\NServiceBus.Core\Transports\Msmq\MsmqDequeueStrategy.cs:line 262
   at NServiceBus.Transports.Msmq.MsmqDequeueStrategy.Action() in c:\BuildAgent\work\d4de8921a0aabf04\src\NServiceBus.Core\Transports\Msmq\MsmqDequeueStrategy.cs:line 197
2013-08-30 09:35:02,508 [9] WARN  NServiceBus.Faults.Forwarder.FaultManager [(null)] <(null)> - Message has failed FLR and will be handed over to SLR for retry attempt: 1, MessageID=8aaed043-b744-49c2-965d-a22a009deb32.
INFO NServiceBus.Unicast.Transport.TransportReceiver[(null)]-无法处理消息
Autofac.Core.Registration.ComponentNotRegisteredException:请求的服务“NServiceBus.Impersonation.ExtractIncomingPrincipal”尚未注册。要避免此异常,请注册组件以提供服务,使用IsRegistered()检查服务注册,或使用ResolveOptional()方法解析可选依赖项。
在c:\BuildAgent\work\d4de8921a0aabf04\src\NServiceBus.Core\Unicast\Transport\TransportReceiver.ProcessMessage(TransportMessage消息)中的NServiceBus.Unicast.Transport.TransportReceiver.ProcessMessage(TransportMessage消息):第353行
在c:\BuildAgent\work\d4de8921a0aabf04\src\NServiceBus.Core\Unicast\Transport\TransportReceiver.tryproces(TransportMessage消息)中的NServiceBus.Unicast.Transport.TransportReceiver.tryproces处:第233行
在c:\BuildAgent\work\d4de8921a0aabf04\src\NServiceBus.Core\Transports\Msmq\MSMQDEQUEUESTREGY.ProcessMessage(TransportMessage消息)中的NServiceBus.Transports.Msmq\MSMQDEQUEUESTREGY.cs:第262行
在c:\BuildAgent\work\d4de8921a0aabf04\src\NServiceBus.Core\Transports\Msmq\msmqdequeuestregy.cs中的NServiceBus.Transports.Msmq.msmqdequeuestregy.Action()处:第197行
2013-08-30 09:35:02508[9]警告NServiceBus.Faults.Forwarder.FaultManager[(null)]-消息已使FLR失败,并将被移交给SLR进行重试尝试:1,消息ID=8aaed043-b744-49c2-965d-A22A000932。
我认为实现或注册一个“ExtractIncomingPrincipal”需要什么是相当明显的,但我似乎找不到任何关于如何使用或是否有一个默认的可以使用的文档。我不会想到我必须注册任何与NServiceBus相关的服务,因为其中许多服务已经在我的IoC实施中注册

根据要求,以下是我目前拥有的EndpointConfig和支持代码:

[EndpointSLA("00:00:30")]
public class EndpointConfig : IConfigureThisEndpoint, AsA_Server, IWantCustomInitialization {
    public void Init() {
        Configure.With().ObjectBuilderAdapter().UseInMemoryTimeoutPersister().UseInMemoryGatewayPersister().InMemorySagaPersister().InMemorySubscriptionStorage();
   }
}

//public class PrincipalExtractor : ExtractIncomingPrincipal {
//    public IPrincipal GetPrincipal(TransportMessage message) {
//        return Thread.CurrentPrincipal;
//    }
//}

public class ObjectBuilderAdapter : IContainer {
    readonly IDependencyInjector injector;

    public ObjectBuilderAdapter(IDependencyInjectionBuilder dependencyInjectionBuilder) {
        injector = dependencyInjectionBuilder.Create(); //This method does all the common service registrations that I am trying to re-use
        //injector.RegisterType<ExtractIncomingPrincipal, PrincipalExtractor>();
    }

    public void Dispose() {
        injector.Dispose();
    }

    public object Build(Type typeToBuild) {
        return injector.Resolve(typeToBuild);
    }

    public IContainer BuildChildContainer() {
        return new ObjectBuilderAdapter(new DependencyInjectorBuilder());
    }

    public IEnumerable<object> BuildAll(Type typeToBuild) {
        return injector.ResolveAll(typeToBuild);
    }

    public void Configure(Type component, DependencyLifecycle dependencyLifecycle) {
        injector.RegisterType(component);
    }

    public void Configure<T>(Func<T> component, DependencyLifecycle dependencyLifecycle) {
            injector.RegisterType(component);
    }

    public void ConfigureProperty(Type component, string property, object value) {
        if (injector is AutofacDependencyInjector) {
          ((AutofacDependencyInjector)injector).ConfigureProperty(component, property, value);
        } else {
            Debug.WriteLine("Configuring {0} for property {1} but we don't handle this scenario.", component.Name, property);
        }
    }

    public void RegisterSingleton(Type lookupType, object instance) {
        injector.RegisterInstance(lookupType, instance);
    }

    public bool HasComponent(Type componentType) {
        return injector.IsRegistered(componentType);
    }

    public void Release(object instance) { }
}

public static class Extensions {
    public static Configure ObjectBuilderAdapter(this Configure config) {
        ConfigureCommon.With(config, new ObjectBuilderAdapter(new DependencyInjectorBuilder()));
        return config;
    }
}
[EndpointSLA(“00:00:30”)]
公共类EndpointConfig:IConfigureThisEndpoint、AsA_服务器、IWantCustomInitialization{
公共void Init(){
配置.With().ObjectBuilderAdapter().UseInMemoryTimeoutPersister().UseInMemoryGatewayPersister().InMemorySagaPersister().InMemorySubscriptionStorage();
}
}
//公共类原则:ExtractIncomingPrincipal{
//公共IPrincipal GetPrincipal(传输消息){
//返回Thread.CurrentPrincipal;
//    }
//}
公共类ObjectBuilderAdapter:IContainer{
只读idependency注入器;
公共对象生成器适配器(IDependencyInjectionBuilder依赖项InjectionBuilder){
injector=dependencyInjectionBuilder.Create();//此方法执行我尝试重用的所有公共服务注册
//injector.RegisterType();
}
公共空间处置(){
注射器。处置();
}
公共对象生成(类型typeToBuild){
返回喷油器。解析(类型ToBuild);
}
公共IContainer BuildChildContainer(){
返回新的ObjectBuilderAdapter(新的DependencyInjectorBuilder());
}
公共IEnumerable BuildAll(类型typeToBuild){
返回喷油器。全部解析(类型ToBuild);
}
公共无效配置(类型组件,DependencyLifecycle DependencyLifecycle){
注入器.寄存器类型(组件);
}
public void Configure(Func组件、DependencyLifecycle DependencyLifecycle){
注入器.寄存器类型(组件);
}
公共void ConfigureProperty(类型组件、字符串属性、对象值){
if(喷油器为自动传真依赖喷油器){
((AutofacDependencyInjector)injector).ConfigureProperty(组件、属性、值);
}否则{
WriteLine(“为属性{1}配置{0},但我们不处理此场景。”,component.Name,property);
}
}
public void RegisterSingleton(类型lookupType,对象实例){
RegisterInstance(lookupType,实例);
}
公共bool HasComponent(类型componentType){
回油喷油器。已登记(部件类型);
}
公共无效释放(对象实例){}
}
公共静态类扩展{
公共静态配置ObjectBuilderAdapter(此配置){
ConfigureCommon.With(config,newObjectBuilderAdapter(newDependencyInjectorBuilder());
返回配置;
}
}

我删除了类上的IWantCustomInitialization接口实现(我之前尝试过的其他东西遗留下来),我的服务现在处理该消息。仍然存在错误(与尝试连接到Raven有关[尽管我认为我正在使用内存中的所有内容),但它正在处理消息。

请发布您的endpointconfig代码?