Пример #1
0
        protected override void Load(ContainerBuilder builder)
        {
            builder.RegisterType <CSharpFeatureDiscovery>()
            .Keyed <IFeatureDiscovery>(LanguageIdentifier.CSharp)
            .SingleInstance();

            builder.RegisterType <VBNetFeatureDiscovery>()
            .Keyed <IFeatureDiscovery>(LanguageIdentifier.VBNet)
            .SingleInstance();

            builder.RegisterType <CSharpLanguage>()
            .As <IRoslynLanguage>()
            .WithParameter(ResolvedParameter.ForKeyed <IFeatureDiscovery>(LanguageIdentifier.CSharp))
            .SingleInstance();

            builder.RegisterType <VBNetLanguage>()
            .As <IRoslynLanguage>()
            .WithParameter(ResolvedParameter.ForKeyed <IFeatureDiscovery>(LanguageIdentifier.VBNet))
            .SingleInstance();

            builder.RegisterType <CSharpDecompiler>().As <IDecompiler>().SingleInstance();
            builder.RegisterType <VBNetDecompiler>().As <IDecompiler>().SingleInstance();
            builder.RegisterType <ILDecompiler>().As <IDecompiler>().SingleInstance();

            builder.RegisterType <CodeProcessor>().As <ICodeProcessor>().SingleInstance();
        }
Пример #2
0
        public void AResolvedParameterForAKeyedServiceDoesNotMatcheParametersOfTheServiceTypeWhenTheKeyedServiceIsUnavailable()
        {
            var rp        = ResolvedParameter.ForKeyed <char>(new object());
            var cp        = GetCharParameter();
            var canSupply = rp.CanSupplyValue(cp, new ContainerBuilder().Build(), out Func <object> vp);

            Assert.False(canSupply);
        }
Пример #3
0
        public void AResolvedParameterForAKeyedServiceDoesNotMatcheParametersOfTheServiceTypeWhenTheKeyedServiceIsUnavailable()
        {
            var           rp = ResolvedParameter.ForKeyed <char>(new object());
            var           cp = GetCharParameter();
            Func <object> vp;
            var           canSupply = rp.CanSupplyValue(cp, Container.Empty, out vp);

            Assert.That(canSupply, Is.False);
        }
Пример #4
0
        public void AResolvedParameterForAKeyedServiceMatchesParametersOfTheServiceTypeWhenTheKeyedServiceIsAvailable()
        {
            var k       = new object();
            var builder = new ContainerBuilder();

            builder.RegisterInstance((object)'a').Keyed <char>(k);
            var container = builder.Build();
            var rp        = ResolvedParameter.ForKeyed <char>(k);
            var cp        = GetCharParameter();

            Assert.True(rp.CanSupplyValue(cp, container, out Func <object> vp));
        }
Пример #5
0
        protected override void Load(ContainerBuilder builder)
        {
            builder.RegisterType <MetadataReferenceCollector>()
            .As <IMetadataReferenceCollector>()
            .SingleInstance();

            builder.RegisterType <CSharpFeatureDiscovery>()
            .Keyed <IFeatureDiscovery>(LanguageNames.CSharp)
            .SingleInstance();

            builder.RegisterType <VisualBasicFeatureDiscovery>()
            .Keyed <IFeatureDiscovery>(LanguageNames.VisualBasic)
            .SingleInstance();

            builder.RegisterType <CSharpSetup>()
            .As <IMirrorSharpSetup>()
            .WithParameter(ResolvedParameter.ForKeyed <IFeatureDiscovery>(LanguageNames.CSharp))
            .SingleInstance();

            builder.RegisterType <VisualBasicSetup>()
            .As <IMirrorSharpSetup>()
            .WithParameter(ResolvedParameter.ForKeyed <IFeatureDiscovery>(LanguageNames.VisualBasic))
            .SingleInstance();

            builder.RegisterType <FSharpSetup>()
            .As <IMirrorSharpSetup>()
            .SingleInstance();

            builder.RegisterType <Compiler>()
            .As <ICompiler>()
            .SingleInstance();

            builder.RegisterType <RoslynAstTarget>().As <IAstTarget>().SingleInstance();
            builder.RegisterType <FSharpAstTarget>().As <IAstTarget>().SingleInstance();

            builder.RegisterType <CSharpDecompiler>().As <IDecompiler>().SingleInstance();
            builder.RegisterType <VisualBasicDecompiler>().As <IDecompiler>().SingleInstance();
            builder.RegisterType <ILDecompiler>().As <IDecompiler>().SingleInstance();
            builder.RegisterType <JitAsmDecompiler>().As <IDecompiler>().SingleInstance();

            builder.RegisterInstance(new RecyclableMemoryStreamManager())
            .AsSelf();

            builder.RegisterType <SlowUpdate>()
            .As <ISlowUpdateExtension>()
            .SingleInstance();

            builder.RegisterType <SetOptionsFromClient>()
            .As <ISetOptionsFromClientExtension>()
            .SingleInstance();
        }
    public CompositionRoot()
    {
        var builder = new ContainerBuilder();

        builder.RegisterType <SomeService>()
        .WithParameter(ResolvedParameter.ForKeyed <Func <DbContext> >("Some"));
        builder.RegisterType <AnotherService>()
        .WithParameter(ResolvedParameter.ForKeyed <Func <DbContext> >("Another"));
        builder.RegisterInstance <Func <DbContext> >(() => new DbContext("Some"))
        .Keyed <Func <DbContext> >("Some");
        builder.RegisterInstance <Func <DbContext> >(() => new DbContext("Another"))
        .Keyed <Func <DbContext> >("Another");
        _root = builder.Build();
    }
Пример #7
0
        protected override void Load(ContainerBuilder builder) {
            builder.RegisterType<MetadataReferenceCollector>()
                   .As<IMetadataReferenceCollector>()
                   .SingleInstance();

            builder.RegisterType<CSharpFeatureDiscovery>()
                   .Keyed<IFeatureDiscovery>(LanguageNames.CSharp)
                   .SingleInstance();

            builder.RegisterType<VisualBasicFeatureDiscovery>()
                   .Keyed<IFeatureDiscovery>(LanguageNames.VisualBasic)
                   .SingleInstance();

            builder.RegisterType<CSharpAdapter>()
                   .As<ILanguageAdapter>()
                   .WithParameter(ResolvedParameter.ForKeyed<IFeatureDiscovery>(LanguageNames.CSharp))
                   .SingleInstance();

            builder.RegisterType<VisualBasicAdapter>()
                   .As<ILanguageAdapter>()
                   .WithParameter(ResolvedParameter.ForKeyed<IFeatureDiscovery>(LanguageNames.VisualBasic))
                   .SingleInstance();

            builder.RegisterType<FSharpAdapter>()
                   .As<ILanguageAdapter>()
                   .SingleInstance();

            builder.RegisterType<PhpAdapter>()
                   .As<ILanguageAdapter>()
                   .SingleInstance();

            builder.RegisterType<Compiler>()
                   .As<ICompiler>()
                   .SingleInstance();

            builder.RegisterType<RoslynAstTarget>().As<IAstTarget>().SingleInstance();
            builder.RegisterType<FSharpAstTarget>().As<IAstTarget>().SingleInstance();
            builder.RegisterType<PhpAstTarget>().As<IAstTarget>().SingleInstance();

            builder.RegisterType<CSharpDecompiler>().As<IDecompiler>().SingleInstance();
            builder.RegisterType<VisualBasicDecompiler>().As<IDecompiler>().SingleInstance();
            builder.RegisterType<ILDecompiler>().As<IDecompiler>().SingleInstance();
            builder.RegisterType<JitAsmDecompiler>().As<IDecompiler>().SingleInstance();

            builder.RegisterType<Executor>()
                   .As<IExecutor>()
                   .SingleInstance();
            builder.RegisterType<FlowReportingRewriter>()
                   .As<IAssemblyRewriter>()
                   .SingleInstance();
            builder.RegisterType<FSharpEntryPointRewriter>()
                   .As<IAssemblyRewriter>()
                   .SingleInstance();

            builder.RegisterInstance(new RecyclableMemoryStreamManager())
                   .AsSelf();

            builder.RegisterType<DefaultTraceMonitor>()
                   .As<IMonitor>()
                   .SingleInstance()
                   .PreserveExistingDefaults();

            builder.RegisterType<MonitorExceptionLogger>()
                   .As<IExceptionLogger>()
                   .SingleInstance();

            builder.RegisterType<SlowUpdate>()
                   .As<ISlowUpdateExtension>()
                   .SingleInstance();

            builder.RegisterType<SetOptionsFromClient>()
                   .As<ISetOptionsFromClientExtension>()
                   .SingleInstance();
        }
Пример #8
0
        protected override void Load(ContainerBuilder builder)
        {
            builder.RegisterType <UserOption>().As <IOption <User> >().SingleInstance();
            builder.RegisterType <DataModeOption>().As <IOption <DataMode> >().SingleInstance();

            var folderPath             = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
            var usersConnectionString  = $"Data Source={Path.Combine(folderPath, "Users.db3")};Version=3;";
            var ordersConnectionString = $"Data Source={Path.Combine(folderPath, "Orders.db3")};Version=3;";

            builder.RegisterInstance <IDbConnection>(new SQLiteConnection(usersConnectionString)).Keyed <IDbConnection>(Database.Users).SingleInstance();
            builder.RegisterInstance <IDbConnection>(new SQLiteConnection(ordersConnectionString)).Keyed <IDbConnection>(Database.Orders).SingleInstance();

            builder.RegisterType <DapperWrapper>().As <IDapperWrapper>().WithParameter(ResolvedParameter.ForKeyed <IDbConnection>(Database.Orders)).Keyed <IDapperWrapper>(Database.Orders).InstancePerLifetimeScope();
            builder.RegisterType <DapperWrapper>().As <IDapperWrapper>().WithParameter(ResolvedParameter.ForKeyed <IDbConnection>(Database.Users)).Keyed <IDapperWrapper>(Database.Users).InstancePerLifetimeScope();

            builder.RegisterType <LoginRepository>().As <ILoginRepository>()
            .WithParameters(new[] {
                ResolvedParameter.ForKeyed <IDapperWrapper>(Database.Users),
                ResolvedParameter.ForKeyed <IValidator <User> >(Validator.Login)
            }).InstancePerLifetimeScope();

            builder.RegisterType <RegisterRepository>().As <IRegisterRepository>()
            .WithParameters(new[] {
                ResolvedParameter.ForKeyed <IDapperWrapper>(Database.Users),
                ResolvedParameter.ForKeyed <IValidator <User> >(Validator.Register)
            }).InstancePerLifetimeScope();

            builder.RegisterType <RegisterUserValidator>().As <IValidator <User> >().Keyed <IValidator <User> >(Validator.Register)
            .WithParameter(ResolvedParameter.ForKeyed <IDapperWrapper>(Database.Users)).InstancePerLifetimeScope();

            builder.RegisterType <LoginUserValidator>().As <IValidator <User> >().Keyed <IValidator <User> >(Validator.Login)
            .WithParameter(ResolvedParameter.ForKeyed <IDapperWrapper>(Database.Users)).InstancePerLifetimeScope();

            builder.RegisterType <BrickLinkRequestFactory>().As <IBrickLinkRequestFactory>();
            builder.Register <Func <User, IBrickLinkRequestFactory> >(context =>
            {
                var cc = context.Resolve <IComponentContext>();
                return(user => cc.Resolve <IBrickLinkRequestFactory>(TypedParameter.From(user)));
            });

            builder.RegisterType <ItemImageRepository>().As <IItemImageRepository>().InstancePerLifetimeScope();

            builder.RegisterType <BrickLinkAPI.OrderRepository>().As <IOrderRepository>().Keyed <IOrderRepository>(DataMode.API).InstancePerLifetimeScope();
            builder.RegisterType <LocalDB.OrderRepository>().As <IOrderRepository>().Keyed <IOrderRepository>(DataMode.Database).InstancePerLifetimeScope();
            builder.Register <Func <IOrderRepository> >(context =>
            {
                var cc = context.Resolve <IComponentContext>();
                return(() =>
                {
                    var mode = cc.Resolve <IOption <DataMode> >().Value;
                    return mode switch
                    {
                        DataMode.Database => cc.ResolveKeyed <IOrderRepository>(mode, ResolvedParameter.ForKeyed <IDapperWrapper>(Database.Orders)),
                        DataMode.API => cc.ResolveKeyed <IOrderRepository>(mode),
                        _ => null
                    };
                });
            });

            builder.RegisterType <DatabaseUpdater>().As <IDatabaseUpdater>()
            .WithParameters(new[] {
                ResolvedParameter.ForKeyed <IDapperWrapper>(Database.Orders),
                ResolvedParameter.ForKeyed <IOrderRepository>(DataMode.API)
            }).InstancePerLifetimeScope();

            builder.RegisterType <OrdersDatabaseInitializer>().As <IDatabaseInitializer>().Keyed <IDatabaseInitializer>(Database.Orders)
            .WithParameter(ResolvedParameter.ForKeyed <IDapperWrapper>(Database.Orders)).InstancePerLifetimeScope();

            builder.RegisterType <UsersDatabaseInitializer>().As <IDatabaseInitializer>().Keyed <IDatabaseInitializer>(Database.Users)
            .WithParameter(ResolvedParameter.ForKeyed <IDapperWrapper>(Database.Users)).InstancePerLifetimeScope();
        }
        protected override void Load(ContainerBuilder builder)
        {
            builder.RegisterModule <IoCDataModule>();

            // MainStage
            {
                // Register keyed main View/Presenter
                builder.RegisterType <MainStageView>().As <IMainStageView>().Keyed <IStageView>(Key.MainStage).InstancePerLifetimeScope();
                // Parameters must be specified because dependencies have multiple types registered
                builder.RegisterType <MainStagePresenter>().As <IStagePresenter>().Keyed <IStagePresenter>(Key.MainStage)
                .WithParameters(new[] {
                    // Resolve IStageView keyed with Key.Main
                    ResolvedParameter.ForKeyed <IMainStageView>(Key.MainStage),
                    // Resolve IPresenter factory keyed with PresenterType.Order
                    ResolvedParameter.ForKeyed <Func <IPresenter> >(Key.Order),
                    // Resolve IDatabaseInitializer keyed with Database.Orders
                    ResolvedParameter.ForKeyed <IDatabaseInitializer>(Database.Orders)
                }).InstancePerLifetimeScope();
                // Register ToolStripRenderer for MainStageView
                builder.RegisterInstance(new ToolStripProfessionalRenderer(new MenuColorTable())).As <ToolStripRenderer>();
            }

            // ChildStage
            {
                // Register keyed child View/Presenter
                builder.RegisterType <ChildStageView>().As <IStageView>().Keyed <IStageView>(Key.ChildStage).InstancePerLifetimeScope();
                // Parameters must be specified because dependencies have multiple types registered
                builder.RegisterType <ChildStagePresenter>().As <IStagePresenter>().AsSelf().Keyed <IStagePresenter>(Key.ChildStage)
                .WithParameters(new[] {
                    // Resolve IStageView keyed with Key.ChildStage
                    ResolvedParameter.ForKeyed <IStageView>(Key.ChildStage),
                    // Resolve IPresenter factory keyed with PresenterType.Login
                    // Parameter name must be specified as ChildStagePresenter takes 2 different IPresenter factories
                    new ResolvedParameter(
                        (pi, ctx) => pi.ParameterType == typeof(Func <Action, IPresenter>) && pi.Name == "loginPresenterFactory",
                        (pi, ctx) => ctx.ResolveKeyed <Func <Action, IPresenter> >(Key.Login)
                        ),
                    // Resolve IPresenter factory keyed with PresenterType.Register
                    // Parameter name must be specified as ChildStagePresenter takes 2 different IPresenter factories
                    new ResolvedParameter(
                        (pi, ctx) => pi.ParameterType == typeof(Func <Action, IPresenter>) && pi.Name == "registerPresenterFactory",
                        (pi, ctx) => ctx.ResolveKeyed <Func <Action, IPresenter> >(Key.Register)
                        ),
                    // Resolve IDatabaseInitializer keyed with Database.Orders
                    ResolvedParameter.ForKeyed <IDatabaseInitializer>(Database.Users)
                }).InstancePerLifetimeScope();
                // Register an IStagePresenter factory that returns a child stage Presenter with the InitialView property set
                builder.Register <Func <ChildStageViewType, Action, IStagePresenter> >(context =>
                {
                    var cc = context.Resolve <IComponentContext>();
                    return((initialView, action) =>
                    {
                        var presenter = cc.ResolveKeyed <IStagePresenter>(Key.ChildStage, TypedParameter.From(action)) as ChildStagePresenter;
                        presenter.InitialView = initialView;
                        return presenter;
                    });
                });
            }

            // Order
            {
                // Register order View/Presenter keyed with PresenterType.Order
                builder.RegisterType <OrderView>().As <IOrderView>();
                builder.RegisterType <OrderPresenter>().As <IPresenter>().Keyed <IPresenter>(Key.Order).WithParameter(ResolvedParameter.ForKeyed <IStagePresenter>(Key.MainStage));
                // Register IPresenter factory which returns IPresenter keyed with PresenterType.Order
                builder.Register <Func <IPresenter> >(context =>
                {
                    var cc = context.Resolve <IComponentContext>();
                    return(() => cc.ResolveKeyed <IPresenter>(Key.Order));
                }).Keyed <Func <IPresenter> >(Key.Order);
            }

            // Item
            {
                // Register item View/Presenter
                builder.RegisterType <ItemView>().As <IItemView>();
                builder.RegisterType <ItemPresenter>().As <IPresenter>().Keyed <IPresenter>(Key.Item).WithParameter(ResolvedParameter.ForKeyed <IStagePresenter>(Key.MainStage));
                // Register ItemPresenter factory
                builder.Register <Func <IReadOnlyList <Item>, Action, IPresenter> >(context =>
                {
                    var cc = context.Resolve <IComponentContext>();
                    return((items, action) => cc.ResolveKeyed <IPresenter>(Key.Item, TypedParameter.From(items), TypedParameter.From(action)));
                });
            }

            // Login
            {
                // Register login View/Presenter keyed with PresenterType.Login
                builder.RegisterType <LoginView>().As <ILoginView>();
                builder.RegisterType <LoginPresenter>().As <IPresenter>().Keyed <IPresenter>(Key.Login).WithParameter(ResolvedParameter.ForKeyed <IStagePresenter>(Key.ChildStage));
                // Register IPresenter factory which returns IPresenter keyed with PresenterType.Login
                builder.Register <Func <Action, IPresenter> >(context =>
                {
                    var cc = context.Resolve <IComponentContext>();
                    return(action => cc.ResolveKeyed <IPresenter>(Key.Login, TypedParameter.From(action)));
                }).Keyed <Func <Action, IPresenter> >(Key.Login);
            }

            // Register
            {
                // Register register View/Presenter keyed with PresenterType.Register
                builder.RegisterType <RegisterView>().As <IRegisterView>();
                builder.RegisterType <RegisterPresenter>().As <IPresenter>().Keyed <IPresenter>(Key.Register).WithParameter(ResolvedParameter.ForKeyed <IStagePresenter>(Key.ChildStage));
                // Register IPresenter factory which returns IPresenter keyed with PresenterType.Register
                builder.Register <Func <Action, IPresenter> >(context =>
                {
                    var cc = context.Resolve <IComponentContext>();
                    return(action => cc.ResolveKeyed <IPresenter>(Key.Register, TypedParameter.From(action)));
                }).Keyed <Func <Action, IPresenter> >(Key.Register);
            }

            // Mappers
            {
                builder.RegisterType <DtoMapper>().As <IDtoMapper>().InstancePerLifetimeScope();
                builder.RegisterType <VmMapper>().As <IVmMapper>().InstancePerLifetimeScope();
            }

            // Filtering
            {
                builder.RegisterType <OrderFilterer>().As <IOrderFilterer>().InstancePerLifetimeScope();
                builder.RegisterType <ItemFilterer>().As <IItemFilterer>().InstancePerLifetimeScope();

                // Any/All filter strategies
                {
                    builder.RegisterType <FilterAnyStrategy>().As <IAnyAllFilterModeStrategy>().Keyed <IAnyAllFilterModeStrategy>(AnyAllFilterMode.Any).InstancePerLifetimeScope();
                    builder.RegisterType <FilterAllStrategy>().As <IAnyAllFilterModeStrategy>().Keyed <IAnyAllFilterModeStrategy>(AnyAllFilterMode.All).InstancePerLifetimeScope();
                    // Register an IAnyAllFilterModeStrategy factory which returns the strategy keyed with the AnyAllFilterMode provided
                    builder.Register <Func <AnyAllFilterMode, IAnyAllFilterModeStrategy> >(context =>
                    {
                        var cc = context.Resolve <IComponentContext>();
                        return(mode => cc.ResolveKeyed <IAnyAllFilterModeStrategy>(mode));
                    });
                }

                // Min/Max filter strategies
                {
                    builder.RegisterType <OrderItemCountFilterMaxStrategy>().As <IMinMaxFilterModeStrategy <Order> >().Keyed <IMinMaxFilterModeStrategy <Order> >(MinMaxFilterMode.Max);
                    builder.RegisterType <OrderItemCountFilterMinStrategy>().As <IMinMaxFilterModeStrategy <Order> >().Keyed <IMinMaxFilterModeStrategy <Order> >(MinMaxFilterMode.Min);
                    // Register an IMinMaxFilterModeStrategy factory which returns the strategy keyed with the MinMaxFilterMode provided
                    builder.Register <Func <string, MinMaxFilterMode, IMinMaxFilterModeStrategy <Order> > >(context =>
                    {
                        var cc = context.Resolve <IComponentContext>();
                        return((countType, mode) =>
                        {
                            int getItemCountProperty(Order order) => countType switch
                            {
                                nameof(Order.TotalCount) => order.TotalCount,
                                nameof(Order.UniqueCount) => order.UniqueCount,
                                _ => default
                            };
                            return cc.ResolveKeyed <IMinMaxFilterModeStrategy <Order> >(mode, TypedParameter.From <Func <Order, int> >(getItemCountProperty));
                        });
                    });

                    builder.RegisterType <ItemCountFilterMaxStrategy>().As <IMinMaxFilterModeStrategy <ItemVm> >().Keyed <IMinMaxFilterModeStrategy <ItemVm> >(MinMaxFilterMode.Max);
                    builder.RegisterType <ItemCountFilterMinStrategy>().As <IMinMaxFilterModeStrategy <ItemVm> >().Keyed <IMinMaxFilterModeStrategy <ItemVm> >(MinMaxFilterMode.Min);
                    // Register an IMinMaxFilterModeStrategy factory which returns the strategy keyed with the MinMaxFilterMode provided
                    builder.Register <Func <MinMaxFilterMode, IMinMaxFilterModeStrategy <ItemVm> > >(context =>
                    {
                        var cc = context.Resolve <IComponentContext>();
                        return(mode => cc.ResolveKeyed <IMinMaxFilterModeStrategy <ItemVm> >(mode));
                    });
                }

                // Strict/Loose filter strategies
                {
                    builder.RegisterType <OrderSearchFilterStrictStrategy>().As <IStrictLooseFilterModeStrategy <Order> >().Keyed <IStrictLooseFilterModeStrategy <Order> >(StrictLooseFilterMode.Strict);
                    builder.RegisterType <OrderSearchFilterLooseStrategy>().As <IStrictLooseFilterModeStrategy <Order> >().Keyed <IStrictLooseFilterModeStrategy <Order> >(StrictLooseFilterMode.Loose);

                    builder.Register <Func <string, StrictLooseFilterMode, IStrictLooseFilterModeStrategy <Order> > >(context =>
                    {
                        var cc = context.Resolve <IComponentContext>();
                        return((searchType, mode) =>
                        {
                            string getOrderProperty(Order order) => searchType switch
                            {
                                nameof(Order.Id) => order.Id.ToString(),
                                nameof(Order.BuyerName) => order.BuyerName,
                                _ => default
                            };
                            return cc.ResolveKeyed <IStrictLooseFilterModeStrategy <Order> >(mode, TypedParameter.From <Func <Order, string> >(getOrderProperty));
                        });
                    });

                    builder.RegisterType <ItemSearchFilterStrictStrategy>().As <IStrictLooseFilterModeStrategy <ItemVm> >().Keyed <IStrictLooseFilterModeStrategy <ItemVm> >(StrictLooseFilterMode.Strict);
                    builder.RegisterType <ItemSearchFilterLooseStrategy>().As <IStrictLooseFilterModeStrategy <ItemVm> >().Keyed <IStrictLooseFilterModeStrategy <ItemVm> >(StrictLooseFilterMode.Loose);

                    builder.Register <Func <string, StrictLooseFilterMode, IStrictLooseFilterModeStrategy <ItemVm> > >(context =>
                    {
                        var cc = context.Resolve <IComponentContext>();
                        return((searchType, mode) =>
                        {
                            string getItemProperty(ItemVm item) => searchType switch
                            {
                                nameof(ItemVm.Number) => item.Number,
                                nameof(ItemVm.InventoryId) => item.InventoryId.ToString(),
                                nameof(ItemVm.Name) => item.Name,
                                _ => default
                            };
                            return cc.ResolveKeyed <IStrictLooseFilterModeStrategy <ItemVm> >(mode, TypedParameter.From <Func <ItemVm, string> >(getItemProperty));
                        });
                    });
                }
            }
        }