使用 TinyIoC 解析带有构造函数参数的具体类型
Resolve concrete type with constructor arguments using TinyIoC
我有一个 Nancy API 并创建了一个继承自 DefaultNancyBootstrapper
的自定义 Bootstraper。
我也有具体类型 ConcreteFoo
,我想在请求范围内绑定到自身并传递特定的构造函数参数。
public class ConcreteFoo {
private readonly int _baseInteger;
public ConcreteFoo(int baseInteger) {
_baseInteger = baseInteger;
}
}
我的自定义引导程序如下:
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)
我找到了 this 相关问题,但它指的是注册接口而不是具体类型。
我是不是做错了什么,或者您是否熟悉另一种解析具体类型并提供构造函数参数的方法?
我认为你需要container.Register...
无论如何,最近我更喜欢使用 Nancy 自动连接的 IRegistration 类。这样事情就被 topic/concern 分隔开,并且引导程序根本没有被修改。
我有一个 Nancy API 并创建了一个继承自 DefaultNancyBootstrapper
的自定义 Bootstraper。
我也有具体类型 ConcreteFoo
,我想在请求范围内绑定到自身并传递特定的构造函数参数。
public class ConcreteFoo {
private readonly int _baseInteger;
public ConcreteFoo(int baseInteger) {
_baseInteger = baseInteger;
}
}
我的自定义引导程序如下:
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)
我找到了 this 相关问题,但它指的是注册接口而不是具体类型。
我是不是做错了什么,或者您是否熟悉另一种解析具体类型并提供构造函数参数的方法?
我认为你需要container.Register...
无论如何,最近我更喜欢使用 Nancy 自动连接的 IRegistration 类。这样事情就被 topic/concern 分隔开,并且引导程序根本没有被修改。