c# - Register multiple DbContext for IUnitOfWork using Unity IOC -


i using repository pattern unit of work using iunitofwork via

https://github.com/ziyasal-archive/repositoryt.entityframework/tree/master/repositoryt.entityframework

sample ioc registration given under https://github.com/ziyasal-archive/repositoryt.entityframework/blob/master/repositoryt.entityframework.autofacconsolesample/ioc.cs

when have multiple dbcontext in project , need register iunitofwork how can correct registration ioc? seems pick last registration example

        container.registertype<iunitofwork, efunitofwork<sample1datacontext>>(new containercontrolledlifetimemanager());         container.registertype<iunitofwork, efunitofwork<sample2datacontext>>(new containercontrolledlifetimemanager()); 

when resolve return me sample2datacontext

https://github.com/ziyasal-archive/repositoryt.entityframework/issues/11

unity let have 1 "default" mapping. if wish map 1 "from" type (iunitofwork) multiple "to" types (efunitofwork<sample1datacontext>, efunitofwork<sample2datacontext>, ...) need use named registrations.

container.registertype<iunitofwork, efunitofwork<sample1datacontext>>(     typeof(sample1datacontext).name, new containercontrolledlifetimemanager()); container.registertype<iunitofwork, efunitofwork<sample2datacontext>>(     typeof(sample2datacontext).name, new containercontrolledlifetimemanager()); 

in case i'm using typeof(sample1datacontext).name name of registration.

then when resolving, name of registration need used resolve desired concrete type. example retrieve efunitofwork<sample1datacontext>:

container.resolve<iunitofwork>(typeof(sample1datacontext).name); 

usually iunitofwork dependency type such service. example register interface iservice maps concrete service , dependent on iunitofwork , wish use efunitofwork<sample2datacontext> type register similar to:

container.registertype<iservice, service>(     new injectionconstructor(         new resolvedparameter<iunitofwork>(typeof(sample2datacontext).name))); 

if need inject multiple iunitofwork instances 1 service add appropriate parameters injectionconstructor. if constructor service service(iunitofwork data1context, iunitofwork data2context) this:

container.registertype<iservice, service>(     new injectionconstructor(         new resolvedparameter<iunitofwork>(typeof(sample1datacontext).name)),         new resolvedparameter<iunitofwork>(typeof(sample2datacontext).name))); 

Comments

Popular posts from this blog

networking - Vagrant-provisioned VirtualBox VM is not reachable from Ubuntu host -

c# - ASP.NET Core - There is already an object named 'AspNetRoles' in the database -

ruby on rails - ArgumentError: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true -