2015-07-23 17 views
12
IProductRepositoryProxy ProductDataServiceProviderInstance = new ServiceProductDataProvider(); 
builder.RegisterInstance(ProductDataServiceProviderInstance).As<IProductRepositoryProxy>(); 

VSAutofac registerInstance vs SingleInstance

builder.RegisterType<ServiceProductDataProvider>().As<IProductRepositoryProxy>().InstancePerRequest(); 

ho visto questo codice da un ex-impiegato qui e chiedo se il ragazzo ha voluto registrare un comportamento .SingleInstance().

builder.RegisterType<ServiceProductDataProvider>().As<IProductRepositoryProxy>().SingleInstance(); 

È il Newing-up manuale del ServiceProductDataProvider con registerInstance non è la stessa come il Registro .SingleInstance() ??

risposta

31

Il rinnovo manuale del ServiceProductDataProvider con RegisterInstance non è uguale al Register .SingleInstance() ??

Il RegisterInstance permette di registrare una singola istanza in autofac.

La differenza tra RegisterInstance e RegisterType + SingleInstance metodi è che il metodo RegisterInstance permette di registrare un'istanza non costruita da Autofac.

Ma entrambe le soluzioni comporteranno la registrazione di un singleton in Autofac.

Tra l'altro, sia di registrazione sono equivalenti nel seguente codice di esempio

var instance = GetInstanceFromSomewhere(); 

builder.RegisterInstance<IService>(instance); 
builder.Register(c => instance).As<IService>().SingleInstance(); 
+0

Sarebbe questo codice sia anche la stessa ed equivalente al vostro DUE .Register chiamate di cui sopra? => builder.RegisterType (). As (). SingleInstance(); Uso il RegisterType che non hai menzionato. – Elisabeth

+0

@Elisa non strettamente equivalente. Con la soluzione 'RegisterType' +' SingleInstance', si registra un singleton in * Autofac * (come l'altra soluzione) ma non è necessario fornire l'istanza, * Autofac * lo compilerà la prima volta che è richiesto mentre per il 'RegisterInstance' * Autofac * non crea l'istanza e deve essere creata durante il processo di registrazione –

+0

ok ma alla fine è tecnicamente la stessa istanza di Singleton ha condiviso l'intero ciclo di vita dell'applicazione fino a quando IIS non va giù ... – Elisabeth