У меня есть иерархия классов, подобная этой (упрощенно):
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 и применяет его к подключению.
- Привязки указывают, какиеИспользуемые реализации IConnectionConfiguration, основанные на типе создаваемого IService
В настоящее время у меня есть реализация провайдера, подобная этой:
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?