1

在服务堆栈配置中,我收到错误“找不到 IRequestLogger 类型的注册”。使用默认配置,环顾四周后,我似乎需要在配置中添加一个插件。

Plugins.Add(new RequestLogsFeature { RequiredRoles = new string[] { } });

问题是我为什么会收到这个错误?并在必要时定义 IRequestLogger。

我使用 Simple Injector 作为 IoC 容器。

编辑:这是我的 IoC 代码:

 public override void Configure(Container container)
            { 

                var simpleInjector = new SimpleInjectorContainer();
                container.Adapter = simpleInjector;
                Plugins.Add(new RequestLogsFeature { RequiredRoles = new string[] { } });
                simpleInjector.SContainer.Register<ICacheClient, MemoryCacheClient>();
                simpleInjector.SContainer.Register<IUserRepository,UserRepository>();
                Routes.Add<UserRequest>("/Api/User/{Id}");

                //Routes.Add<HomeResponse>("/Api/Home","GET");

            }

     public class SimpleInjectorContainer:ISimpleInjectorContainer
        {

             public SimpleInjectorContainer()
             {
                 SContainer = new SimpleInjector.Container();
             }

             public SimpleInjector.Container SContainer { get; set; }

             public T TryResolve<T>()
             {

                 return (T)SContainer.GetInstance(typeof(T));
             }

             public T Resolve<T>()
             {
                 return (T)SContainer.GetInstance(typeof(T));
             }
        }

         public interface ISimpleInjectorContainer : IContainerAdapter
        {
             SimpleInjector.Container SContainer { get; set; }
        }

谢谢。

4

1 回答 1

1

你需要让你的 TryResolve 实现更加宽容。它需要能够处理无法解析服务。如果 IRequestLogger 解析为 null,则 ServiceStack 将简单地跳过它。

Resolve应该要求注册接口。 TryResolve应该优雅地处理未注册的接口。

请参阅此 SO 答案以了解如何执行此操作防止简单注入器在解决未注册服务时引发异常

于 2013-08-01T12:18:42.290 回答