我有一个IConfig
对象,其中包含在我的应用程序中使用的设置。此刻,我将整个对象注入到每个需要它的对象的构造函数中,如下:
public interface IConfig
{
string Username { get; }
string Password { get; }
//... other settings
}
public class Foo : IFoo
{
private readonly string username;
private readonly string password;
public Foo(IConfig config)
{
this.username = config.Username;
this.password = config.Password;
}
}
缺点是IConfig
包含大量设置,因为它是从整体配置文件反序列化的,因此不需要注入整个对象。我想做的是将构造函数更改为,Foo(string username, string password)
以便它只接收它需要的设置。这也使得创建Foo
用于测试的对象变得更加容易(不必IConfig
为了创建而设置Foo
)。我想直接在 my 中绑定构造函数参数NinjectModule
,如下所示:
public class MyModule : NinjectModule
{
public override void Load()
{
Bind<IConfig>().To<JsonConfig>()
.InSingletonScope();
Bind<IFoo>().To<Foo>()
.WithConstructorArgument("username", IConfig.Username)
.WithConstructorArgument("password", IConfig.Password);
}
}
显然这段代码不起作用,但我将如何去做我想做的事?
我最初的想法是使用NinjectModule.Kernel
获取IKernel
然后获取我的IConfig
对象的实例并根据需要注入属性,但是返回的对象NinjectModule.Kernel
没有Get<T>()
方法。