13

İş akışı etkinliklerinizde DI kullanmak mümkün müdür? ve eğer evet ise, nasıl?Workflow Foundation'da bağımlılık enjeksiyonu/IoC 4

Örneğin

public sealed class MyActivity : CodeActivity 
{ 
    public MyClass Dependency { get; set; } 

    protected override void Execute(CodeActivityContext context) 
    { 
     Dependency.DoSomething(); 
    } 
} 

gibi bir faaliyet nasıl ben Dependency ayarlayabilirsiniz varsa? (Ben Spring.NET kullanıyorum)

+0

Ayrıca basit bir DI kapsayıcısını kendiniz de bir uzantı olarak ekleyebilir ve Execute yönteminizin içeriğinden kolayca erişebilirsiniz. http://blog.petegoo.com/index.php/2010/08/16/unit-test-workflow-4-activities-dependency-injection/ –

+0

FYI, araç takımı projemde bunu sağlayan bazı özel etkinlikler oluşturdum. işlevsellik. Ben bağımlılık çözünürlüğü (belirtilen gibi Maurice Servis Locator) olarak adlandırdım. Etkinlik süreklilik senaryoları ile ilgilenir ve bittiğinde bağımlılıkları temizler. http://www.neovolve.com/post/2010/10/01/Custom-Windows-Workflow-activity-for-dependency-resolutione28093Wrap-up.aspx –

cevap

19

İş Akışı IOC konteyner kullanmaz. İş akışı çalışma zamanına bağımlılıkları eklentiler ve iş akışı etkinlikleri olarak eklediğiniz ve bu hizmetleri iş akışı uzantılarından bağlam aracılığıyla aldığınız ServiceLocator kalıbını kullanır.

Bir ServiceLocator ve IOC modeli benzerdir ve aynı amaç, ayrıştırma bağımlılıklarındadır. Bir ServiceLocator bağımlılıkları dışarı çekmek için kullanılırken, bir IOC konteynırında bağımlılıkları iterek farklıdır.

Örnek aktivite:

public class MyBookmarkedActivity : NativeActivity 
{ 
    protected override void CacheMetadata(NativeActivityMetadata metadata) 
    { 
     base.CacheMetadata(metadata); 
     metadata.AddDefaultExtensionProvider<MyExtension>(() => new MyExtension()); 
    } 

    protected override void Execute(NativeActivityContext context) 
    { 
     var extension = context.GetExtension<MyExtension>(); 
     extension.DoSomething(); 

    } 
} 

MyExtension sınıfı burada uzantısıdır ve bu temel sınıf veya arabirim gereksinimleri vardır.

+0

Cevabınız için teşekkürler. Herhangi bir örnek/öğretici var mı? – Fabiano

+0

Bir örnek eklendi. – Maurice

+0

Tekrar teşekkürler. Fakat bunun gibi bir uzantıyı bir faaliyete eklemem gerekiyor. Bizim durumumuzda faaliyetler, uzantıyı nasıl yapılacağını bilmez. İş akışı örneği çerçeve tarafından oluşturulduğunda uzantıyı nereye ekleyebilirim? – Fabiano

İlgili konular