Где лучше регистрировать типы WPF

Мне надо регистрировать типы (использую Autofac). Стоит ли нагружать класс App в WPF непосредственно регистрацией типов внутри метода OnSturtup (объявлять IContainer, ContainerBuilder итд) или стоит сделать отдельные классы которые будут только регистрировать типы, а затем уже вызывать методы регистрации внутри OnSturtup?

Сейчас надо регистрировать 3 типа, однако это только начало.

По идее класс App нужен для определения общих ресурсов для приложения и поэтому можно регистрировать прямо сразу в классе, но тогда класс App будет засорен существованием IContainer и прочих сущностей. Не лучше ли вынести это в отдельные классы? А может стоит регистрировать типы вообще где-то в другом месте?

Правда не знаю в каком. Помогите определиться с тем "как правильно"


Ответы (1 шт):

Автор решения: Lapish

На мой взгляд, ваш случай хорошо разобран в prism(autofac/unity). Один из авторов сего фреймворка - Brian Lagunas(Microsoft MVP, Xamarin MVP, Microsoft P&P Champion etc). Человек явно что-то понимает в архитектуре приложений, если, по крайне мере, раньше этот фреймворк часто использовали в корпоративных приложениях.

Ниже пример #20

В библиотеке объявляем свой инициализатор:

public class ModuleAModule : IModule
{
    public void OnInitialized(IContainerProvider containerProvider)
    {

    }

    public void RegisterTypes(IContainerRegistry containerRegistry)
    {
        //Что-то регистрируем
    }
}

В самом приложении добавляем наши библиотеки-модули:

public partial class App : PrismApplication
{
    protected override Window CreateShell()
    {
        return Container.Resolve<MainWindow>();
    }

    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
        //Здесь регистрируем локальные сервисы

    }

    protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
    {
        //Наш модуль
        moduleCatalog.AddModule<ModuleA.ModuleAModule>();
    }
}

Примеры(29шт)

PrismApp

IModule

→ Ссылка