2011-11-16 13 views
5

mam część kodu, który ma zależności, które wyglądają następująco:AutoFac: Czym zajmuje się PropertyWiringFlags.AllowCircularDependencies?

public class MyPage : Page //ASPX WebForms page 
{ 
    public IPersonBl PersonBl { get; set; } 

} 

public class PersonBl : IPersonBl 
{ 

    public PersonBl(ISomeMagicBl magicBl){...} 

} 

public class SomeMagicBl : ISomeMagicBl 
{ 
    public IPersonBl PersonBl { get; set; } 

    public SomeMagicBl(/*Other dependencies*/) {...} 
} 

Moja konfiguracja modułu wygląda następująco

... 
builder.RegisterAssemblyTypes(ThisAssembly).Where(t => t.Name.EndsWith("BL")).AsImplementedInterfaces().PropertiesAutowired(PropertyWiringFlags.AllowCircularDependencies).InstancePerLifetimeScope(); 
... 

Jak widać, mam okrężne zależności w moich zajęciach które udało mi się rozwiązać za pomocą ..PropertiesAutowired(PropertyWiringFlags.AllowCircularDependencies)...

Moje pytanie: Co dokładnie ta flaga robi za kulisami, aby rozwiązać te zależności cykliczne?

Odpowiedz

3

Flaga zmienia punkt, w którym dokonywany jest zastrzyk właściwości dla danego typu, od czasu budowy do utworzenia reszty wykresu. Opiera się on na jednym lub kilku składnikach cyklu mających pewien rodzaj współużytkowania (singleton lub per-request) - nawet z flagą, jeśli wszystkie komponenty są zależne od instancji, wtedy cykl nadal będzie istniał.

Bez flagi Autofac traktuje wszystkie zależności składnika, właściwości lub nie, jako warunki wstępne, aby każdy inny komponent mógł się do niego odnieść. Domyślnie jest to bardziej niezawodne.

+0

Perfect, thx. Zakładam, że zastosowałeś taką strategię, chciałeś tylko być pewien :) – Juri

1

tylko w celach informacyjnych, innym dobrym sposobem na rozwiązanie zależności cyklicznej jest uzyskanie zależności od Func<T>, o ile nie masz dostępu do func w konstruktorze.

+0

Czy możesz to rozwinąć? – Juri

+0

'Lazy ' działa również. Wzajemne zależności konstruktora działają tak długo, jak jedna z zależności używa Lazy/Func jako typu zależności. –

Powiązane problemy