2

Nancy API があり、から継承するカスタム Bootstraper を作成しましたDefaultNancyBootstrapper

ConcreteFooまた、リクエストスコープで自分自身にバインドし、特定のコンストラクター引数を渡したい具体的なタイプもあります。

public class ConcreteFoo {
    private readonly int _baseInteger;
    public ConcreteFoo(int baseInteger) {
        _baseInteger = baseInteger;
    }
}

私のカスタム Bootstraper は次のとおりです。

public class Bootstraper : DefaultNancyBootstrapper {
    protected override void ConfigureApplicationContainer(TinyIoCContainer container) {
        base.ConfigureApplicationContainer(container);
    }

    protected override void ConfigureRequestContainer(TinyIoCContainer container, NancyContext context) {
        base.ConfigureRequestContainer(container, context);
        container.Resolve<ConcreteFoo>(new NamedParameterOverloads {{"baseInteger", 100}});
    }
}

ConcreteFoo目的のコンストラクタ パラメータで解決するために、 TinyIoC Wikiで提供されている例を使用しました。カスタム ブートストラップのオーバーライドからコードが渡されることに気付きましたresponse

var response = container.CanResolve<ConcreteFoo>(new NamedParameterOverloads {{"baseInteger", 100}});

ただし、アプリケーションのブートストラップ中に例外が発生します。inner-inner-inner... (多くの内部) 例外は以下にリストされており、作成ConcreteFooできず、解決できないと述べていますSystem.Int32

InnerException: Nancy.TinyIoc.TinyIoCResolutionException
  HResult=-2146233088
  Message=Unable to resolve type: TestService.Api.ConcreteFoo
  Source=Nancy
  StackTrace:
       at Nancy.TinyIoc.TinyIoCContainer.ConstructType(Type requestedType, Type implementationType, ConstructorInfo constructor, NamedParameterOverloads parameters, ResolveOptions options)
       at Nancy.TinyIoc.TinyIoCContainer.MultiInstanceFactory.GetObject(Type requestedType, TinyIoCContainer container, NamedParameterOverloads parameters, ResolveOptions options)
  InnerException: Nancy.TinyIoc.TinyIoCResolutionException
       HResult=-2146233088
       Message=Unable to resolve type: System.Int32
       Source=Nancy
       StackTrace:
            at Nancy.TinyIoc.TinyIoCContainer.ConstructType(Type requestedType, Type implementationType, ConstructorInfo constructor, NamedParameterOverloads parameters, ResolveOptions options)
            at Nancy.TinyIoc.TinyIoCContainer.ConstructType(Type requestedType, Type implementationType, NamedParameterOverloads parameters, ResolveOptions options)
            at Nancy.TinyIoc.TinyIoCContainer.ResolveInternal(TypeRegistration registration, NamedParameterOverloads parameters, ResolveOptions options)

この関連する質問を見つけましたが、具象型ではなくインターフェイスを登録することを指しています。

私は何か間違ったことをしていますか、それとも具象型を解決してコンストラクター引数を提供する別の方法に精通していますか?

4

1 に答える 1