1

サービス スタック構成で、「タイプ IRequestLogger の登録が見つかりませんでした」というエラーが表示されます。デフォルトの構成では、周りを見回すと、構成のようにプラグインを追加する必要があるようです。

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

問題は、なぜこのエラーが発生するのかということです。必要に応じて IRequestLogger を定義します。

IoC コンテナーとして Simple Injector を使用しています。

編集:これは私の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 に答える