Er det en måte å sette forskjellig livssyklus for hver forwared type?

stemmer
2

Castle Windsor tillater ikke registreringer som vil inneholde en duplikat implementering type. Den lar skriver videresending som betyr at du kan kartlegge gjennomføringen typen til mer enn én tjenestetyper så lenge du registrere det en gang.

ASP.NET vNext er Dependency Injection bibliotek krever samme gjennomføringen type som skal registreres for flere tjenestetyper. Men disse tjenestetypene har også forskjellige lifecyles som vist her .

public static IEnumerable<IServiceDescriptor> DefaultServices()
{
    var describer = new ServiceDescriber();

    yield return describer.Transient<IFakeService, FakeService>();
    yield return describer.Scoped<IFakeScopedService, FakeService>();
    yield return describer.Singleton<IFakeSingletonService, FakeService>();
    yield return describer.Transient<IFakeFallbackService, FakeService>();
}

Og her er den Forward metode signatur:

public ComponentRegistration<TService> Forward(params Type[] types)

Som du kan se, er det ikke aksepterer livssyklus parametere. Ninject test suite er bestått. Kan dette bli støttet i Castle Windsor også?

Publisert på 26/06/2014 klokken 20:55
kilden bruker
På andre språk...                            


1 svar

stemmer
0

I Castle Windsor kan du også bare registrere samme implementere typen mer enn én gang. Eg

container.Register(
    Component.For<IFakeService>().ImplementedBy<FakeService>(),
    Component.For<IReallyFakeService>().ImplementedBy<FakeService>());

Jeg tror at hele konseptet med typer videresending opphører å være fornuftig hvis du ønsker ulike livsstiler, siden ideen bak videresending er at du får tilbake samme forekomst av TypeA for hvert grensesnitt som du registrerer deg for TypeA.

For eksempel med de ovennevnte registreringer ga jeg hvis jeg kjørte

var fakeService = container.Resolve<IFakeService>();
var reallyFakeService = container.Resolve<IReallyFakeService>();

Object.ReferenceEquals(fakeService, reallyFakeService);// => False

da får jeg tilbake to forskjellige tilfeller. Men hvis jeg i stedet bruke registrerings

container.Register(
    Component
        .For<IFakeService>()
        .Forward<IReallyFakeService>()
        .ImplementedBy<FakeService>());

da min Object.ReferenceEquals(fakeService, reallyFakeService);vilje nå tilbake true. Men hvis du vil ha ulike livsstiler for grensesnitt denne opphører å være sant, og du er tilbake til der du var med flere registreringer uansett.

Svarte 10/02/2015 kl. 11:44
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more