示例#1
0
        public static IContainer Build(Options options, params object[] singletons)
        {
            var builder = new ContainerBuilder();

            builder.RegisterModule(new DialogModule_MakeRoot());

            // make a "singleton" MockConnectorFactory per unit test execution
            IConnectorClientFactory factory = null;

            builder
            .Register((c, p) => factory ?? (factory = new MockConnectorFactory(c.Resolve <IAddress>().BotId)))
            .As <IConnectorClientFactory>()
            .InstancePerLifetimeScope();

            var r =
                builder
                .Register <Queue <IMessageActivity> >(c => new Queue <IMessageActivity>())
                .AsSelf()
                .InstancePerLifetimeScope();

            // truncate AlwaysSendDirect_BotToUser/IConnectorClient with null implementation
            builder
            .RegisterType <BotToUserQueue>()
            .Keyed <IBotToUser>(typeof(AlwaysSendDirect_BotToUser))
            .InstancePerLifetimeScope();

            if (options.HasFlag(Options.InMemoryBotDataStore))
            {
                //Note: memory store will be single instance for the bot
                builder.RegisterType <InMemoryDataStore>()
                .AsSelf()
                .SingleInstance();

                builder.Register(c => new CachingBotDataStore(c.Resolve <InMemoryDataStore>(),
                                                              CachingBotDataStoreConsistencyPolicy.ETagBasedConsistency))
                .As <IBotDataStore <BotData> >()
                .AsSelf()
                .InstancePerLifetimeScope();
            }

            if (options.HasFlag(Options.NeedsInputHint))
            {
                builder.Register(
                    c => new AlwaysNeedInputHintChannelCapability(new ChannelCapability(c.Resolve <IAddress>())))
                .AsImplementedInterfaces()
                .InstancePerLifetimeScope();
            }

            foreach (var singleton in singletons)
            {
                builder
                .Register(c => singleton)
                .Keyed(FiberModule.Key_DoNotSerialize, singleton.GetType());
            }

            return(builder.Build());
        }
示例#2
0
        public Mock <StateClient> MockIBots(MockConnectorFactory mockConnectorFactory)
        {
            var botsClient = new Moq.Mock <StateClient>(MockBehavior.Loose);

            botsClient.Setup(d => d.BotState.SetConversationDataWithHttpMessagesAsync(It.IsAny <string>(),
                                                                                      It.IsAny <string>(), It.IsAny <BotData>(), It.IsAny <Dictionary <string, List <string> > >(),
                                                                                      It.IsAny <CancellationToken>()))
            .Returns <string, string, BotData, Dictionary <string, List <string> >, CancellationToken>(
                async(channelId, conversationId, data, headers, token) =>
            {
                return(await mockConnectorFactory.UpsertData(channelId, null, conversationId,
                                                             BotStoreType.BotConversationData, data));
            });

            botsClient.Setup(d => d.BotState.GetConversationDataWithHttpMessagesAsync(It.IsAny <string>(),
                                                                                      It.IsAny <string>(), It.IsAny <Dictionary <string, List <string> > >(), It.IsAny <CancellationToken>()))
            .Returns <string, string, Dictionary <string, List <string> >, CancellationToken>(
                async(channelId, conversationId, headers, token) =>
            {
                return(await mockConnectorFactory.GetData(channelId, null, conversationId,
                                                          BotStoreType.BotConversationData));
            });


            botsClient.Setup(d => d.BotState.SetUserDataWithHttpMessagesAsync(It.IsAny <string>(), It.IsAny <string>(),
                                                                              It.IsAny <BotData>(), It.IsAny <Dictionary <string, List <string> > >(), It.IsAny <CancellationToken>()))
            .Returns <string, string, BotData, Dictionary <string, List <string> >, CancellationToken>(
                async(channelId, userId, data, headers, token) =>
            {
                return(await mockConnectorFactory.UpsertData(channelId, userId, null, BotStoreType.BotUserData,
                                                             data));
            });

            botsClient.Setup(d => d.BotState.GetUserDataWithHttpMessagesAsync(It.IsAny <string>(), It.IsAny <string>(),
                                                                              It.IsAny <Dictionary <string, List <string> > >(), It.IsAny <CancellationToken>()))
            .Returns <string, string, Dictionary <string, List <string> >, CancellationToken>(
                async(channelId, userId, headers, token) =>
            {
                return(await mockConnectorFactory.GetData(channelId, userId, null, BotStoreType.BotUserData));
            });

            botsClient.Setup(d => d.BotState.SetPrivateConversationDataWithHttpMessagesAsync(It.IsAny <string>(),
                                                                                             It.IsAny <string>(), It.IsAny <string>(), It.IsAny <BotData>(),
                                                                                             It.IsAny <Dictionary <string, List <string> > >(), It.IsAny <CancellationToken>()))
            .Returns <string, string, string, BotData, Dictionary <string, List <string> >, CancellationToken>(
                async(channelId, conversationId, userId, data, headers, token) =>
            {
                return(await mockConnectorFactory.UpsertData(channelId, userId, conversationId,
                                                             BotStoreType.BotPrivateConversationData, data));
            });

            botsClient.Setup(d => d.BotState.GetPrivateConversationDataWithHttpMessagesAsync(It.IsAny <string>(),
                                                                                             It.IsAny <string>(), It.IsAny <string>(), It.IsAny <Dictionary <string, List <string> > >(),
                                                                                             It.IsAny <CancellationToken>()))
            .Returns <string, string, string, Dictionary <string, List <string> >, CancellationToken>(
                async(channelId, conversationId, userId, headers, token) =>
            {
                return(await mockConnectorFactory.GetData(channelId, userId, conversationId,
                                                          BotStoreType.BotPrivateConversationData));
            });

            return(botsClient);
        }
示例#3
0
        public static IContainer Build(Options options, params object[] singletons)
        {
            var builder = new ContainerBuilder();

            if (options.HasFlag(Options.ResolveDialogFromContainer))
            {
                builder.RegisterModule(new DialogModule());
            }
            else
            {
                builder.RegisterModule(new DialogModule_MakeRoot());
            }

            // make a "singleton" MockConnectorFactory per unit test execution
            IConnectorClientFactory factory = null;

            builder
            .Register((c, p) => factory ?? (factory = new MockConnectorFactory(c.Resolve <IAddress>().BotId)))
            .As <IConnectorClientFactory>()
            .InstancePerLifetimeScope();

            if (options.HasFlag(Options.Reflection))
            {
                builder.RegisterModule(new ReflectionSurrogateModule());
            }

            var r =
                builder
                .Register <Queue <IMessageActivity> >(c => new Queue <IMessageActivity>())
                .AsSelf();

            if (options.HasFlag(Options.ScopedQueue))
            {
                r.InstancePerLifetimeScope();
            }
            else
            {
                r.SingleInstance();
            }

            builder
            .RegisterType <BotToUserQueue>()
            .AsSelf()
            .InstancePerLifetimeScope();

            builder
            .Register(c => new MapToChannelData_BotToUser(
                          c.Resolve <BotToUserQueue>(),
                          new List <IMessageActivityMapper> {
                new KeyboardCardMapper()
            }))
            .As <IBotToUser>()
            .InstancePerLifetimeScope();

            if (options.HasFlag(Options.LastWriteWinsCachingBotDataStore))
            {
                builder.Register <CachingBotDataStore>(
                    c => new CachingBotDataStore(c.ResolveKeyed <IBotDataStore <BotData> >(typeof(ConnectorStore)),
                                                 CachingBotDataStoreConsistencyPolicy.LastWriteWins))
                .As <IBotDataStore <BotData> >()
                .AsSelf()
                .InstancePerLifetimeScope();
            }

            foreach (var singleton in singletons)
            {
                builder
                .Register(c => singleton)
                .Keyed(FiberModule.Key_DoNotSerialize, singleton.GetType());
            }

            return(builder.Build());
        }