Почему мой внедренный объект зависимости не является тем же экземпляром в каждом модуле? - PullRequest
0 голосов
/ 21 июля 2009

Я использую Prism и Unity.

У меня есть загрузчик :

protected override IModuleCatalog GetModuleCatalog()
{
    ModuleCatalog catalog = new ModuleCatalog()
        .AddModule(typeof(CustomerModule.CustomerModule))
        .AddModule(typeof(EmployeesModule.EmployeesModule))
        .AddModule(typeof(MenuModule.MenuModule));
    return catalog;
}

А мой CustomerModule получает введенный MenuManager и добавляет к нему пункты меню:

public void Initialize()
{
    menuManager.MenuItems.Add("Customers");
    menuManager.MenuItems.Add("Other Customers");
}

Но когда мой MainMenuPresenter объект также получает инъекцию MenuManager, это не тот же объект:

public MainMenuPresenter(MainMenuView view, MenuManager menuManager)
{
    View = view;
    View.DataContext = this;

    foreach (string menuItemTitle in menuManager.MenuItems)
    {
        MenuItems.Add(menuItemTitle);
    }
}

Как мне сказать Prism / Unity, что я хочу, чтобы введенный MenuManager был Singleton, чтобы один и тот же объект вводился в каждый из моих модулей и объектов?

1 Ответ

6 голосов
/ 21 июля 2009

Используя Unity, вы делаете это следующим образом (взято из MSDN на Lifetime Managers в Unity ):

// Register a type to have a singleton lifetime without mapping the type
// Uses the container only to implement singleton behavior
myContainer.RegisterType<MySingletonObject>(new ContainerControlledLifetimeManager());
// Following code will return a singleton instance of MySingletonObject
// Container will take over lifetime management of the object
myContainer.Resolve<MySingletonObject>();
...