2015-08-24 3 views
2

Я пытаюсь выяснить весь Mvvm способ объявления синглетонов и особенно те, которые связаны с ними зависимостями IoC. В моем конкретном примере у меня есть UserService, для которого требуется база данных ID и IMvxMessenger в качестве зависимости IoC.MvvmCross разрешающие зависимости IoC

IDatabase от платформы так В моем Droid.UI проекте я решил это, используя следующий код:

var database = new Database(new SQLitePlatformAndroid(), Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "database.db")); 
database.Initialize(); 
Mvx.RegisterSingleton<IDatabase>(database); 

В моем проекте .Core У меня есть следующий код:

var database = Mvx.Resolve<IDatabase>(); 
var messenger = Mvx.Resolve<IMvxMessenger>(); 
Mvx.RegisterSingleton<IUserService>(new UserService(database, messenger)); 

Я пытаюсь обернуть голову вокруг этого. Какова действительно работа Mvx.Resolve и как она работает вместе с решением других зависимостей. Я уже тестировал код выше, и он, похоже, не работает, поэтому я знаю, что у меня отсутствует что-то важное здесь.

Любая помощь по этому поводу будет очень признательна, заблаговременно!

ответ

2

Перейдите по этой ссылке на страницу Service Location and Inversion of Control для MvvmCross и посмотрите на Constructor Injection и Lazy Singleton.

Вместо того чтобы разрешать зависимость при регистрации следующей, разрешите ее, когда экземпляр UserService будет инициализирован.

+0

Извините, что я не следую. Можете ли вы дать пример кода? как для UI, так и для Core – ahmad

+0

Пример кода находится в ссылках, которые я положил в ответ ... –

+0

Думаю, мне нужно читать дальше. Я смог заставить его работать, зарегистрировав тип. Это здорово! но я до сих пор не могу понять причины каждого, поэтому, возможно, дальнейшее чтение поможет. Благодарю. – ahmad