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 との素晴らしい仕事

編集 (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);
});
4

1 に答える 1

2

渡したいパラメーターで 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);
}
于 2016-05-25T20:19:19.337 に答える