private static Either <Exception, string>?TryGetViewModelAssemblyName(
            XamlCode xamlCode,
            ParsedViewModelCode viewModelCode)
        {
            var namesOfAssembliesThatContainViewModelNamespaces = xamlCode.MentionedAssemblies
                                                                  .Where(kvp => kvp.Value.Intersect(viewModelCode.NamespaceNames).Any())
                                                                  .Select(kvp => kvp.Key)
                                                                  .AsImmutable();


            switch (namesOfAssembliesThatContainViewModelNamespaces.Count)
            {
            case 0:
                return(default);

            case 1:
                return(Right(namesOfAssembliesThatContainViewModelNamespaces.Single()));

            default:
                return(Left(
                           (Exception) new InvalidOperationException(
                               "XAML namespaces erroneousely mention ViewModel's namespaces belonging to the following assemblies: " +
                               string.Join(",", namesOfAssembliesThatContainViewModelNamespaces) +
                               ". Please use *single* assembly name for all ViewModel namespaces.")));
            }
        }
 public static Either <Exception, ViewModelAssemblyBuilder>?TryCreateAssemblyBuilder(
     XamlCode xamlCode,
     ParsedViewModelCode?viewModelCode)
 {
     return(viewModelCode == null
         ? default
         : TryGetViewModelAssemblyName(xamlCode, viewModelCode.Value)
            .Map(assemblyName => new ViewModelAssemblyBuilder(assemblyName, viewModelCode.Value.SyntaxTree)));
 }
示例#3
0
 public bool MentionedAssembliesDiffer(XamlCode xamlCode)
 {
     return(!MentionedAssemblies.OrderBy(kvp => kvp.Key)
            .SequenceEqual(xamlCode.MentionedAssemblies.OrderBy(kvp => kvp.Key)));
 }