私はこのようなクラス階層を持っています(簡略化):
class Connection
{
}
interface IService<T>
{
}
class ServiceImplementation : IService<int>
{
public ServiceImplementation(Connection)
{
}
}
interface IConnectionConfiguration
{
public void Configure(Connection c)
}
class ConnectionConfiguration : IConnectionConfiguration
{
public void Configure(Connection c)
}
IConnectionConfiguration と IService の複数の実装があります。次のプロバイダー/バインディングを作成したいと考えています。
- Connection の新しいインスタンスを構築します。
- GetAll を取得し、それを Connection に適用します。
- バインディングは、構築される IService のタイプに基づいて、使用される IConnectionConfiguration 実装を指定します。
現在、次のようなプロバイダーの実装があります。
public Connection CreateInstance(IContext context)
{
var configurations = context.Kernel.GetAll<IConnectionConfiguration>()
var connection = new Connection();
foreach(var config in configurations)
{
config.Configure(connection);
}
return connection;
}
しかし、 IConnectionConfiguration のコンテキストバインディングを作成しようとすると、親リクエストまたは親コンテキストがありません...
Bind<IConnectionConfiguration>().To<ConcreteConfiguration>().When(ctx => {
// loop through parent contexts and see if the Service == typeof(IService<int>);
// EXCEPT: The ParentRequest and ParentContext properties are null.
});
ここで何が間違っていますか?ninjectでこれを行うことはできますか?