2016-03-28 24 views
1

ile kaydedildiğinde, bir derlenmiş sınıfın çözülmesi Prism.Forms (https://github.com/joacar/Prism/tree/pr-517) 'da DryIoc için destek oluşturmaya çalışmak ve bir senaryoyu tökezlemek için nasıl çalışacağımı başaramam.DryIoc - Temel sınıf bir anahtar adı

Uzun bir öyküyü kısaltmak için sorunlar şu şekildedir: Prism.DryIoc.Forms uygulamasında yeni bir uygulama oluştururken, PrismApplicationBase uygulamasının bir alt sınıfını oluşturur ve belirli yöntemleri geçersiz kılar, bunlardan biri RegisterTypes'dir.

kullanıcı navigasyon sınıf DryIocPageNavigationService devreye girer sırasında navigasyon

container.RegisterPageForNavigation<MockView>(); 
// Extension method implementation 
public static void RegisterPageForNavigation<TPage>(this IContainer container) 
where TPage : Xamarin.Forms.Page 
{ 
    container.Register<TPage>(typeof(TPage).FullName); 
} 

için bir görünüm kayıt ve burada protected Page CreatePage(string name) { ... }

geçersiz kılmak için bir yöntem vardır edebilirsiniz denilen sorunu gelince: Şu anda biz sadece biliyoruz IContainer kullanarak 'name' verilen Page bir uygulamayı çözmek için. öyle

public static void RegisterPageForNavigation<TPage>(this IContainer container) 
where TPage : Xamarin.Forms.Page, new() 
{ 
    container.Register<Page>(made: 
     Made.Of(() => new TPage()),serviceKey:typeof(TPage).FullName); 
} 

uzatma yöntemi uygulayan eğer

protected Page CreatePage(string name) 
{ 
    // Always returns null 
    return _container.Resolve<Page>(name, IfUnresolved.DefaultOrNull); 
} 

Ancak, sayfa çözüme kavuşturulacağını. Ancak bu (bazı zeki/istenmeyen hack veya yapmak)

Hmm kısa hikaye yapmak varsayılan boş bir yapıcı olması TPage sınırlar almak oldukça uzun :)

Saygılarımızla

yerine RegisterMany kullanmak Register

cevap

3

:

Container.RegisterMany<TPage>(
    serviceKey: whatever); 

Bu, TPage tarafından sağlanan birden fazla hizmet türü ile tek bir fabrika kaydedecektir: TPage'nin kendisi, taban Sayfa sınıfı ve varsa arabirimler.

// works 
Container.Resolve<Page>(
    serviceKey: whatever); 
+0

Bir çekicilik gibi çalışır, teşekkürler! – joacar

+0

Bu konuda bir soru açmak üzereydim, teşekkürler! – MusuNaji