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
設定する必要はありません)。次のように、コンストラクターの引数を my に直接バインドしたいと思います。IConfig
Foo
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>()