Переопределить определенную реализацию при разрешении зависимости

Я прочитал документацию и не могу найти ничего о разрешении типа и в то же время переопределить некоторые из его зависимостей. Проще всего проиллюстрировать на примере

public class A
{
    public A(IServiceA a, IServiceB b) {}    
}
// Resolve scenarion
type => 
{
    // type is A
    var a = Container.Resolve<IServiceA>();
    a.SomeProperty = "magic";
    return Container.Resolve(type) // TODO: How to resolve A using a
}

Имеет ли это смысл? Искал что-то вроде

return Container.Resolve(type, Rule.Override.TypeOf<IServiceA>(a));

Отличная работа с DryIoc

Редактировать (2016-05-26) Мой вопрос был ошибочным. Ниже приведен полный пример кода (для призмы)

ViewModelLocationProvider.SetDefaultViewModelFactory((view, type) =>
{
     var page = view as Page;
     if (page != null)
     {                    
          var navigationService = Container.Resolve<INavigationService>();
          ((IPageAware)navigationService).Page = page;
          var @override = Container.Resolve<Func<INavigationService, type>>(); // How to do this
          return @override(navigationService);
     }
     return Container.Resolve(type);
});

1 ответ

Решение

Разрешите как Func с параметром, который вы хотите передать:

var factory = Container.Resolve<Func<IServiceA, A>>();
var result = factory(a);

Обновить:

Учитывая тип среды выполнения для разрешения:

type => 
{
    // type is A
    var a = Container.Resolve<IServiceA>();
    a.SomeProperty = "magic";

    // Asking for required service type, but wrapped in Func returning object
    var factory = Container.Resolve<Func<IServiceA, object>>(requiredServiceType: type);
    return factory(a);
}
Другие вопросы по тегам