public void Test_MvxViewModelViewTypeFinder()
        {
            ClearAll();

            var assembly = this.GetType().Assembly;
            var viewModelNameLookup = new MvxViewModelByNameLookup();
            viewModelNameLookup.AddAll(assembly);
            var nameMapping = new MvxPostfixAwareViewToViewModelNameMapping("View", "Oddness");
            var test = new MvxViewModelViewTypeFinder(viewModelNameLookup, nameMapping);

            // test for positives
            var result = test.FindTypeOrNull(typeof(Test1View));
            Assert.AreEqual(typeof(Test1ViewModel), result);
            result = test.FindTypeOrNull(typeof(NotTest2View));
            Assert.AreEqual(typeof(Test2ViewModel), result);
            result = test.FindTypeOrNull(typeof(NotTest3View));
            Assert.AreEqual(typeof(Test3ViewModel), result);
            result = test.FindTypeOrNull(typeof(OddNameOddness));
            Assert.AreEqual(typeof(OddNameViewModel), result);

            // test for negatives
            result = test.FindTypeOrNull(typeof(AbstractTest1View));
            Assert.IsNull(result);
            result = test.FindTypeOrNull(typeof(NotReallyAView));
            Assert.IsNull(result);
        }
        public void Test_Builder()
        {
            ClearAll();

            var assembly = this.GetType().Assembly;
            var viewModelNameLookup = new MvxViewModelByNameLookup(new[] {assembly});
            var finder = new MvxViewModelViewTypeFinder(viewModelNameLookup);
            Ioc.RegisterSingleton<IMvxViewModelTypeFinder>(finder);

            var builder = new MvxViewModelViewLookupBuilder();
            var result = builder.Build(new[] {assembly});

            Assert.AreEqual(3, result.Count);
            Assert.AreEqual(typeof (Test1View), result[typeof (Test1ViewModel)]);
            Assert.AreEqual(typeof (NotTest2View), result[typeof (Test2ViewModel)]);
            Assert.AreEqual(typeof (NotTest3View), result[typeof (Test3ViewModel)]);
        }
        public void Test_Builder()
        {
            ClearAll();

            var assembly = this.GetType().Assembly;
            var viewModelNameLookup = new MvxViewModelByNameLookup();
            viewModelNameLookup.AddAll(assembly);
            var nameMapping = new MvxPostfixAwareViewToViewModelNameMapping("View", "Oddness");
            var finder = new MvxViewModelViewTypeFinder(viewModelNameLookup, nameMapping);
            Ioc.RegisterSingleton<IMvxViewModelTypeFinder>(finder);

            var builder = new MvxViewModelViewLookupBuilder();
            var result = builder.Build(new[] {assembly});

            Assert.AreEqual(4, result.Count);
            Assert.AreEqual(typeof (Test1View), result[typeof (Test1ViewModel)]);
            Assert.AreEqual(typeof (NotTest2View), result[typeof (Test2ViewModel)]);
            Assert.AreEqual(typeof (NotTest3View), result[typeof (Test3ViewModel)]);
            Assert.AreEqual(typeof(OddNameOddness), result[typeof(OddNameViewModel)]);
        }
        public void Test_MvxViewModelViewTypeFinder()
        {
            ClearAll();

            var assembly = this.GetType().Assembly;
            var viewModelNameLookup = new MvxViewModelByNameLookup(new[] {assembly});
            var test = new MvxViewModelViewTypeFinder(viewModelNameLookup);

            // test for positives
            var result = test.FindTypeOrNull(typeof (Test1View));
            Assert.AreEqual(typeof (Test1ViewModel), result);
            result = test.FindTypeOrNull(typeof (NotTest2View));
            Assert.AreEqual(typeof (Test2ViewModel), result);
            result = test.FindTypeOrNull(typeof (NotTest3View));
            Assert.AreEqual(typeof (Test3ViewModel), result);

            // test for negatives
            result = test.FindTypeOrNull(typeof (AbstractTest1View));
            Assert.IsNull(result);
            result = test.FindTypeOrNull(typeof (NotReallyAView));
            Assert.IsNull(result);
        }
        /*
        protected virtual Assembly[] GetPluginOwningAssemblies()
        {
            var assemblies = new List<Assembly>();
            assemblies.AddRange(GetViewAssemblies());
            //ideally we would also add ViewModelAssemblies here too :/
            //assemblies.AddRange(GetViewModelAssemblies());
            return assemblies.Distinct().ToArray();
        }
         */

        protected virtual void InitialiseViewModelTypeFinder()
        {
            var viewModelAssemblies = GetViewModelAssemblies();
            var viewModelByNameLookup = new MvxViewModelByNameLookup(viewModelAssemblies);
            Mvx.RegisterSingleton<IMvxViewModelByNameLookup>(viewModelByNameLookup);
            var finder = new MvxViewModelViewTypeFinder(viewModelByNameLookup);
            Mvx.RegisterSingleton<IMvxViewModelTypeFinder>(finder);
        }
        protected virtual void InitializeViewModelTypeFinder()
        {
            var viewModelByNameLookup = new MvxViewModelByNameLookup();

            var viewModelAssemblies = GetViewModelAssemblies();
            foreach (var assembly in viewModelAssemblies)
            {
                viewModelByNameLookup.AddAll(assembly);
            }

            Mvx.RegisterSingleton<IMvxViewModelByNameLookup>(viewModelByNameLookup);
            Mvx.RegisterSingleton<IMvxViewModelByNameRegistry>(viewModelByNameLookup);

            var nameMappingStrategy = CreateViewToViewModelNaming();
            var finder = new MvxViewModelViewTypeFinder(viewModelByNameLookup, nameMappingStrategy);
            Mvx.RegisterSingleton<IMvxViewModelTypeFinder>(finder);
        }