带有Ninject的多个参数的构造方法
我想使用Ninject作为IoC容器,但无法理解如何在构造函数中创建一个具有多个参数的类的实例。 基本上我有一个用于PCL库中的身份validation的服务接口,以及它在WP8项目中的实现,该项目在构造函数中接收cosumer密钥,secret和baseAddress:
//On PCL project public interface IAuthorizationService { bool Authenticate(); } //On WP8 Project pubilc class MyAuthenticator : IAuthorizationService { public MyAuthenticator(string consumerKey, string consumerSecret, string baseAddress) { ... } public bool Authenticate() { ... } }
现在我需要配置Ninject模块,以便我可以获得IAuthorizationService的实例。 如果我的class级没有构造函数,我会这样做:
internal class Module : NinjectModule { public override void Load() { this.Bind().To(); } }
如果它有构造函数的固定值,我会这样做:
internal class Module : NinjectModule { public override void Load() { this.Bind().To().WithConstructorArgument( */* fixed argument here*/* ); } }
并获得一个实例Module.Get()
但是如果构造函数参数在编译时无法解析呢? 如何通过参数? 绑定代码应该如何?
编辑了这个问题。
这很容易。 无论有多少构造函数参数,绑定都保持不变:
Bind().To();
假设MyAuthenticator
有一个构造函数,其中一个参数类型为IFoo
。 你所要做的就是告诉ninject它如何解析/创建一个IFoo
。 再次,非常简单:
Bind().To();
您不需要WithConstructorArgument
, 除非您想要覆盖ninject的默认行为。 假设MyAuthenticator
有一个IFoo
类型的参数加上你想要专门配置的另一个参数string seed
。 你所需要的只是:
Bind().To(); Bind().To() .WithConstructorArgument("seed", "initialSeedValue");
无需指定IFoo
参数的值!