İş 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.
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/ –
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 –