2013-10-07 3 views
1

Я немного устал от высоких жестких ссылок, которые я нашел в приложении Xamarin.Android, которое я унаследовал. Действия, связанные с действиями, funcky stuff, происходящие в обратных вызовах и т. Д. Поэтому я решил зарегистрировать действия в TinyIoC и разрешать их при необходимости.Использование TinyIoC в Xamarin.Android

Этот вид работал некоторое время, пока я не начал замечать странное происшествие. Если приложение было оставлено в покое в течение долгого времени, приложение столкнулось бы с крахом - глядя на журналы, это связано с тем, что I-oC не может разрешить одно из действий - где бы он мог до того, как приложение осталось сидеть в течение длительного времени.

У этого GC написано все это - если вы спросите меня. GC, очевидно, как-то не видит элементы в IoC как ссылку и распоряжается ими.

Это что-то еще? Если да, то как вы преодолеваете это?

ответ

0

Моим советом было бы не использовать TinyIoC - или любой IoC в этом отношении - управлять действиями и т. Д. В Android. Android, похоже, хочет управлять состоянием объектов таким образом, что он сломается при использовании IoC.

Это приведет к множеству проблем, которые трудно - почти невозможно отладить.

0

Заканчивать http://welltechnically.com/?p=2671 - смотри пункт 3.

Я не пробовал еще, но это выглядит многообещающе.

Ниже копироваться и вставляться непосредственно ...

«Будьте осторожны при использовании статических переменных Не думаю, что при инициализации их деятельности 1. - вы будете иметь их инициализируется в деятельности 2. Единственным безопасным место для инициализации глобальной статистики будет классом Application. "

«Марк также предложил использовать DDMS для имитации этого сценария. Я выполнил инструкции и убил процесс после запуска. Как и было предсказано, возобновленная деятельность попыталась использовать контейнер IoC для получения уровня сервиса и быстро бросила все его игрушка из кроватки Если я вместо подклассов Application и сделал установку там, я всегда мог обеспечить зависимости были настроены, когда процесс начался:.»

using System; 
using Android.App; 
using Android.Runtime; 
using SomeApplication.Common.Services; 

namespace SomeApplication.Android 
{ 
[Application(Debuggable = true, Icon = "@drawable/AppIcon", Label = "My Application")] 
class MyApplication : Application 
{ 
public MyApplication(IntPtr ptr, JniHandleOwnership ownership) : base(ptr, ownership) 
{ 
} 

public override void OnCreate() 
{ 
base.OnCreate(); 

#if DEBUG 
ServiceFactory.Initialize(ServiceFactoryType.Mock); 
#else 
ServiceFactory.Initialize(ServiceFactoryType.Service); 
#endif 
} 
} 
} 
+0

Интересно! Я посмотрю позже. спасибо за ссылку – iwayneo

Смежные вопросы