Sto usando pattern di repository con unità di lavoro usando IUnitOfWork via
la registrazione di IOC di esempio viene fornita in https://github.com/ziyasal-archive/RepositoryT.EntityFramework/blob/master/RepositoryT.EntityFramework.AutofacConsoleSample/IoC.cs
Quando hai più DbContext nel tuo progetto e devi registrare IUnitOfWork come puoi correggere la registrazione con IoC? sembra raccogliere l'ultima registrazione per esempio
Container.RegisterType<IUnitOfWork, EfUnitOfWork<Sample1DataContext>>(new ContainerControlledLifetimeManager());
Container.RegisterType<IUnitOfWork, EfUnitOfWork<Sample2DataContext>>(new ContainerControlledLifetimeManager());
Quando risolvo, mi restituirà sempre Sample2DataContext
https://github.com/ziyasal-archive/RepositoryT.EntityFramework/issues/11
Unity ti consente solo di avere una mappatura "predefinita". Se si desidera mappare un tipo "da" ( IUnitOfWork
) a più tipi "a" ( EfUnitOfWork<Sample1DataContext>
, EfUnitOfWork<Sample2DataContext>
, ...) sarà necessario utilizzare le registrazioni denominate.
Container.RegisterType<IUnitOfWork, EfUnitOfWork<Sample1DataContext>>(
typeof(Sample1DataContext).Name, new ContainerControlledLifetimeManager());
Container.RegisterType<IUnitOfWork, EfUnitOfWork<Sample2DataContext>>(
typeof(Sample2DataContext).Name, new ContainerControlledLifetimeManager());
In questo caso sto usando typeof(Sample1DataContext).Name
come il nome della registrazione.
Quindi, al momento della risoluzione, sarà necessario utilizzare il nome della registrazione per risolvere il tipo di calcestruzzo desiderato. Ad esempio per recuperare EfUnitOfWork<Sample1DataContext>
:
Container.Resolve<IUnitOfWork>(typeof(Sample1DataContext).Name);
Solitamente IUnitOfWork
sarà una dipendenza per un altro tipo come un servizio. Ad esempio, per registrare un'interfaccia IService
che IService
mapping su un Service
concreto e che dipende da IUnitOfWork
e si desidera utilizzare il tipo EfUnitOfWork<Sample2DataContext>
è possibile registrare come EfUnitOfWork<Sample2DataContext>
:
Container.RegisterType<IService, Service>(
new InjectionConstructor(
new ResolvedParameter<IUnitOfWork>(typeof(Sample2DataContext).Name)));
Se è necessario iniettare più istanze di IUnitOfWork
per un servizio, aggiungere semplicemente i parametri appropriati a InjectionConstructor. Quindi, se il costruttore per Servizio era Service(IUnitOfWork data1Context, IUnitOfWork data2Context)
potresti farlo in questo modo:
Container.RegisterType<IService, Service>(
new InjectionConstructor(
new ResolvedParameter<IUnitOfWork>(typeof(Sample1DataContext).Name)),
new ResolvedParameter<IUnitOfWork>(typeof(Sample2DataContext).Name)));