2011-05-30 33 views
14

Bir meslektaşı ile Autofac tartışırken, bağımlılıkların çalışma zamanı kaydı konusu ortaya çıktı. Örneğin Prism'de, montajlar genellikle çalışma zamanında yüklenir ve bağımlılıkları IoC konteynerine (genellikle Unity) kaydedilir.Autofac ile çalışma zamanı kaydı

Bu nasıl Autofac ile yapılabilir?

Autofac'ın belgelerinden ve web'de bulduğum şeyden, uygulamanın başlangıçta gerçekleştirildiği görülüyor. "Harici" montajlar kullanıldığında bile, kayıtlar uygulama başlangıcındaki montajlarla birlikte modüllerde bulunur. Konteyner, uygulama başlangıcında "oluşturulduktan" sonra bunu nasıl yaparız?

(montaj uygulamasında diğer bileşenlerin kullanımı için bağımlılıkları eklemek ve böylece iç içe bir konteyner burada sorunu çözmek olmayabilir isteyebilirsiniz unutmayın Bu konuyla İlgili:. Birlik böyle RegisterIfExists ve benzeri yöntemleri vardır Autofac eşdeğerleri var mı?)

Teşekkürler!

+0

olası bir kopyası [Kapsayıcı inşa edildikten sonra servis ekleme Autofac] (http://stackoverflow.com/questions/4998870/autofac-adding-services-after-container-has-been-built) –

cevap

29

Güncelleme varolan Autofac Konteyner: Sen ContainerBuilder.Update() kullanarak çalışma zamanında varolan AutoFac Container güncelleyebilirsiniz.

var container = // something already built 

var updater = new ContainerBuilder(); 
updater.RegisterType<A>(); 
updater.Register(c => new B()).As<IB>(); 

// Add the registrations to the container 
updater.Update(container); 

Autofac ve Prizma Entegrasyon: Soru Whats the status of Prism integration in Autofac? da sizin için yararlı olabilir blog yayınında Autofac 2.2 Released alınan Aşağıdaki kod örneği, kullanımını göstermektedir.

+0

Biliyor musunuz? Bunu dinamik olarak yüklenmiş bir derlemeden türler kullanarak yapmak mümkün mü? Yani, Assembly.LoadFrom() 'işlevini kullanıyorum ve yeni keşfedilen türlerle kapsayıcıyı güncelleştirdim? –

+0

'RegisterType 'aşırı yüklenmelerinden biri' Type' örneğini alır, eğer varsa, gitmek için iyi olmalısınız. – bentayloruk

+0

'Update()' komutu sadece bir kez kullanabilir. Bu çalışma zamanı kaydı için etkili değildir. Mümkünse '.Build()' işleminden sonra yeni türleri kaydetmem gerekiyor ... –

İlgili konular