2016-05-25 2 views
1

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

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

Edit (2016-05-26) Мой вопрос был missleading. Ниже приведен полный пример кода (для prism)

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

Resolve, как Func with parameter вы хотите передать:

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

Update:

Учитывая тип выполнения, чтобы решить:

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); 
} 
+0

Выглядит выступает. Я вижу, что я задал свой вопрос немного промахиванием, поскольку параметр 'type' является' Type' и не известен во время компиляции ... Любые мысли? – joacar

+0

Проверьте обновление. – dadhi

+0

Извините, не так ли вы редактировали, но Update также должны работать. – dadhi

Смежные вопросы