'u kullanırken farklı kurgu parametrelerini bir parçaya aktarmak MEF kullanarak yapıcı parametre enjeksiyonu ile ilgili birçok soru olduğunu biliyorum, ancak benimki biraz farklı.MEF: CreationPolicy.NonShared
Bunu bilmek istiyorum ben PartCreationPolicy(CreationPolicy.NonShared)
ve GetExportedValue
kombinasyonunu kullanıyorum bir kısmının kurucusuna farklı parametre değerleri geçirmek için herhangi bir yolu var mı? Örneğin
:
[PartCreationPolicy(CreationPolicy.NonShared)]
[Export]
public partial class Foo
{
[ImportingConstructor]
public Foo([Import("SomeParam")]object parameter)
{
...
}
}
ve başka bir yere ... Yukarıdaki örnekte
container.ComposeExportedValue("SomeParam", "Some value...");
var instance = container.GetExportedValue<Foo>();
, bunu bir ChangeRejectedException
neden olur ikinci kez çalışan olarak, yalnızca bir kez ComposeExportedValue
kullanabilirsiniz.
Yani, sorularım şunlardır:
- yukarıdaki senaryoda
SomeParam
değerini değiştirmek için başka bir yolu her yeni örneği için, var mı? Aksi takdirde, başka bir DI çerçevesi kullanılmadan bunun başarılabileceği diğer yollar nelerdir? Akla gelen bir şey ise,GetExportedValue
numaralı telefonu aramadan önce bir parametre değeri girdiğim ve daha sonra parçanın yapıcısındaki değeri düşürdüğümSystem.Collections.Concurrent.ConcurrentQueue
gibi bir şeyi açığa çıkarmak için bir hizmet oluşturmaktır. Ama bu bir hack ve aynı zamanda çözdüğünden daha fazla sorun yaratıyor. - Yukarıdaki her iki sorunun cevabı hayırsa, bunu MEF ve diğer DI/IOC çerçevelerinin bir kombinasyonuyla gerçekleştirmenin başka yolları var mı?
Yardımlarınız için teşekkür ederiz. :)
Selamlar,
Yogesh Jagota
Ben arıyorum aşağıda gösterilen ancak 'RegisterComposablePartCatalog' kullanırken nasıl kayıt işleyebilir? AutoFac tarafından otomatik olarak yapıldığı için 'Register''ı kullanamıyorum. AutoFac'a, belirli bir dışa aktarmanın, [ImportingConstructor] 'ı kullanmadan temin ettiğim parametrelerle varsayılan olmayan bir kurucu kullanılarak başlatılması gerektiğini nasıl anlatabilirim? – Yogesh
@Yogesh: AutoFac'a kayıtlı bazı bileşenlere sahip olabilirsiniz (ince taneli denetime gereksinim duyduğunuzda) ve MEF ile dışa aktarılanlar (eklentilerin dinamik keşfine ihtiyacınız olduğunda). Ancak, her ikisini de aynı bileşen için karıştıramazsınız. Diğer bir seçenek de AutoFac'a tamamen geçmek; Gerektiğinde MEF benzeri dinamik keşif yapmak için [Tarama] 'yı (http://code.google.com/p/autofac/wiki/Scanning) kullanabilirsiniz. –
Aslında işe yaradı. Bunu yapmanın yolu, varolan bir kapsayıcıya yeni kayıtların eklenmesini sağlayan 'IContainer'ın' Update' yöntemini kullanmaktır. Teşekkürler. :) – Yogesh