@Remo Gloorのソリューション(およびこの種のソリューションを避け再批判的助言)を使用してくださいNB。したがって、このパラメータは実際にコンストラクタの引数として必要ですか?あるいは、SomeObjectは、オブジェクト上で実行するメソッドにパラメータを渡すことによって、それに依存するすべての人が再利用するステートレスなものに置き換えることができますか?
代わりに
public class SomeObject
{
private float someValue
public SomeObject(IService service, float someValue)
{
this.someValue = someValue
}
public float Do(float x)
{
return this.Service.Get(this.someValue) * x;
}
}
使用の
public class SomeObject
{
public SomeObject(IService service)
{
}
public float Do(float x, float someValue)
{
return this.Service.Get(someValue) * x;
}
}
それが必要な場合は、工場のために行く:
public interface ISomeObjectFactory
{
ISomeObject CreateSomeObject(float someValue);
}
public class SomeObjectFactory : ISomeObjectFactory
{
private IKernel kernel;
public SomeObjectFactory(IKernel kernel)
{
this.Kernel = kernel;
}
public ISomeObject Create(float someValue)
{
return this.kernel.Get<ISomeObject>(WithConstructorArgument("someValue", someValue);
}
}
はプレビュー: Ninject 2.4はもう実装を必要とするが許可されません
kernel.Bind<ISomeObjectFactory>().ToFactory(); // or maybe .AsFactory();
手動コンストラクタパラメータとは、DIの代わりに手動でクラスを構築するとき、またはDIコンテナがパラメータを渡すことを意味します。その前者なら、あなたはコンストラクタに過負荷をかけることができますか? – lahsrah
私はいつもIServiceが必要な場合は、オーバーロードを行うだけでなく、依存関係を避けることができ、(ServiceLocator-yuckを使用しない限り)魔法のように完全なコンストラクタを使用すると仮定します。 –