1

現在、DryIoc を試すために Prism.DryIoc.Forms プロジェクトの作成に取り組んでいます (初めて!)。

Xamarin.Forms にはネイティブの DependencyService があり、Prism の使用に移行するための優れた方法を提供するために、要求されたサービス タイプをメイン コンテナーから解決できない場合に備えて、フォールバック コンテナーとして追加したいと考えています。

現在、私は を作成しFallbackContainer、のインスタンスを渡し、IContainerメソッドをオーバーライドし、作成中に渡されたインスタンスへIResolverの残りのIContainer呼び出しを委任します。

したがって、デフォルトのコンテナが作成および構成された後、次のことを行います

Container = CreateContainer();
ConfigureContainer();
Container.Rules.WithFallbackContainer(new DependencyServiceContainer(Container));

これは好ましい方法ですか、それともデフォルトを添付するだけの方法はありますIResolverか?

現在の実装

public class FallbackDependencyServiceContainer : IContainer
    {
        private readonly IContainer container;

        public FallbackDependencyServiceContainer(IContainer container)
        {
            this.container = container;
        }

        public object Resolve(Type serviceType, bool ifUnresolvedReturnDefault)
        {
            return ResolveFromDependencyService(serviceType);
        }

        public object Resolve(Type serviceType, object serviceKey, bool ifUnresolvedReturnDefault,
            Type requiredServiceType,
            RequestInfo preResolveParent, IScope scope)
        {
            return ResolveFromDependencyService(serviceType);
        }

        public IEnumerable<object> ResolveMany(Type serviceType, object serviceKey, Type requiredServiceType,
            object compositeParentKey,
            Type compositeParentRequiredType, RequestInfo preResolveParent, IScope scope)
        {
            return new[] { ResolveFromDependencyService(serviceType) };
        }

        private static object ResolveFromDependencyService(Type targetType)
        {
            if (!targetType.GetTypeInfo().IsInterface)
            {
                return null;
            }
            var method = typeof(DependencyService).GetTypeInfo().GetDeclaredMethod("Get");
            var genericMethod = method.MakeGenericMethod(targetType);
            return genericMethod.Invoke(null, new object[] { DependencyFetchTarget.GlobalInstance });
        }
....
}

ありがとう、DryIoc をテストするのを楽しみにしています

4

1 に答える 1