13

Son projemde, MSBuild'i bir betik dili olarak kullandık. (evet, gerçekten!) Ayrıca C# içinde daha mantıklı olan parçalar için yüzlerce özel MSBuild görevi yazdık. (Hatta bir MSBuild görevi için bir kod birimi kodu oluşturmak için bir MSBuild bile yazdım. Evet, kendini tüketmişti.).NET'te bir bağımlılık ağacını yönetmenin en iyi yolu nedir?

Başka birini tavsiye etmemekle birlikte, aynı yaklaşımı aldığımda, çok yardımcı bulduğum şeylerden biri de yerleşik bağımlılık yönetimi. Beklediğiniz gibi, bağımlılık ilişkilerini ifade etmek kolay oldu ve MSBuild'in onları tatmin etmesine özen gösterdi. Örneğin, yazılımımızdaki hemen her adım, belirli bir dosya kümesinin belirli bir konuma kopyalanmasını gerektirdi. Kolayca yazabilirsiniz:

Step1: CopyFiles 
Step2: CopyFiles, Step1 

ve Step2 yürütmek, bunun sadece bir kez dosyaları kopyalamak olacaktır.

Bir bağımlılık ağacının oluşturulması ve karşılanması, numaralı yazılımlarda oldukça yaygındır. MSBuild ekibinin bağımlılık yönetimi kodunu almasını, MSBuild'den ayırmasını ve herkesin kullanabileceği .NET Framework'e taşımasını diliyorum. , bu bağımlılığı yönetmek için en iyi seçenek bu şekilde?

cevap

5

Böyle bir davranışı elde etmek için Bahar gibi bir IOC kapsayıcı kullanabilirsiniz.

Yalnızca bir kez bir tekil olarak çalışması gereken ve görev nesnesinin yapıcısını görevin çalıştırmasını gerektiren herhangi bir görevi örnek olarak uygulayın. Daha sonra, bu göreve bağlı olarak daha sonra gelen herhangi bir nesne, o görevin sonucunu alabilen ve bu görevin sonucunu alabilen ya da bu görevin başarıyla yürütüldüğünü çıkarabilen görev için bir başvuru alacaktır.

Yay yapılandırmasında, birlikte zincirleme birçok görevle sonuçlanırsınız, her biri yapıcı yapılandırmasında başka görevlere başvurur. Bu yaklaşım en esnek ve "görevler" ile veya bu konuda çok ağır bir şeyle sınırlı değilsiniz.

Herhangi bir iş akışı kitaplığının da benzer kavramları olduğunu tahmin ediyorum. Ama bunlara gerçekten aşina değilim.

Sanırım daha küçük bir şey için, kullanıcılar ziyaretçi nesnesini kullanarak kendi nesne grafiğini ve arabirimini yuvarlamaları ve belki de durumu tutmak için bir Sözlük kullanmaları gerekiyor.

1

CodePlex'teki Refix projesine bir göz atın. REFERENCE FIX anlamına gelir ve çok güzel çalışır.