Prism: ViewModelLocator.AutoWireViewModel = "True" will not work for unrelated assemblies

I load my modules into bootstrapper with:

    protected override IModuleCatalog CreateModuleCatalog()
    {
        var moduleCatalog = new DirectoryModuleCatalog();
        moduleCatalog.ModulePath = @".\Modules";
        return moduleCatalog;
    }

which works great when a module project is referenced in a shell project. The correct ViewModels will be introduced by the following attached property.

<UserControl prism:ViewModelLocator.AutoWireViewModel="True" [..]</>

If I do not remove the project link, ViewModels will no longer be installed by the prism: ViewModelLocator.AutoWireViewModel = "True".

Does anyone know what these reasons are? You can see this behavior in the project https://github.com/mfe-/Get.the.solution.Prism.Demo . How can i fix this?

+4
source share
1 answer

, ViewModelLocationProvider _defaultViewTypeToViewModelTypeResolver, Type.GetType(string) null.

, MEF . , -, MEF, Google . - :

Type.GetType null MEF

.

MEF DI, . .

EDIT: , . ConfigureViewModelLocator :

        protected override void ConfigureViewModelLocator()
    {
        base.ConfigureViewModelLocator();

        ViewModelLocationProvider.SetDefaultViewTypeToViewModelTypeResolver(viewType =>
        {
            var viewName = viewType.FullName;
            viewName = viewName.Replace(".Views.", ".ViewModels.");
            var viewAssemblyName = viewType.GetTypeInfo().Assembly.FullName;
            var suffix = viewName.EndsWith("View") ? "Model" : "ViewModel";
            var viewModelName = String.Format(CultureInfo.InvariantCulture, "{0}{1}", viewName, suffix);

            var assembly = viewType.GetTypeInfo().Assembly;
            var type = assembly.GetType(viewModelName, true);

            return type;
        });
    }

, .

+8

Source: https://habr.com/ru/post/1610991/


All Articles