Autofac + wstrzykiwanie repo z kilku baz danych

0

Hej,

w jednym projekcie potrzebuję użyć serwisów które łączą się do kilku różnych baz danych.
Serwisy nazwijmy
Baza1Serwis
Baza2Serwis
Baza3Serwis
każdy serwis ma swój interfejs, który chciałbym później wstrzyknąć do kontrolerów asp.net mvc.

Do połączenia z mongoDB używam MongoDB Driver: http://mongodb.github.io/mongo-csharp-driver/2.1/getting_started/quick_tour/
Natomiast do pozostałych SQL-owych baz używam Fluent NHibernate.

Tak wygląda moja konfiguracja w Global.asax:

          // Baza1
            var connectionString2 = System.Configuration.ConfigurationManager.ConnectionStrings[2].ConnectionString;
            var factoryBaza1 = Fluently.Configure()
                      .Database(MsSqlConfiguration.MsSql2012.ConnectionString(connectionString2))
                      .Mappings(m => m.FluentMappings.AddFromAssemblyOf<UserMap>())
                      .BuildSessionFactory();

            var builderBaza1 = new ContainerBuilder();
            builderBaza1.Register(a => factoryBaza1.OpenSession()).As<ISession>().InstancePerRequest();
            builderBaza1.RegisterType<Baza1Service>().As<IBaza1Service>();
            builderBaza1.RegisterControllers(Assembly.GetExecutingAssembly());
            var containerBaza1 = builderBaza1.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(containerBaza1));

            // Baza2
            var connectionString1 = System.Configuration.ConfigurationManager.ConnectionStrings[1].ConnectionString;
            var factoryBaza2 = Fluently.Configure()
                      .Database(MsSqlConfiguration.MsSql2012.ConnectionString(connectionString1))
                      .Mappings(m => m.FluentMappings.AddFromAssemblyOf<CarMap>())
                      .BuildSessionFactory();

            var builderBaza2 = new ContainerBuilder();
            builderBaza2.Register(a => factoryCrm.OpenSession()).As<ISession>().InstancePerRequest();
            builderBaza2.RegisterType<Baza2Service>().As<IBaza2Service>();
            builderBaza2.RegisterControllers(Assembly.GetExecutingAssembly());
            var containerBaza2 = builderBaza2.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(containerBaza2));

            // Baza3 Mongo

            var builderMongo = new ContainerBuilder();
            builderMongo.RegisterType<MongoService>().As<IMongoService>();
            builderMongo.RegisterControllers(Assembly.GetExecutingAssembly());
            var containerMongo = builderMongo.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(containerMongo));

I później w kontrolerach chciałbym móc wstrzyknąć te 3 serwisy tak aby każdy z nich łączył się do innej bazy danych.
Błąd który obecnie otrzymuje to:

None of the constructors found with 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' on type 'Controllers.HomeController' can be invoked with the available services and parameters:
Cannot resolve parameter 'Domain.Interfaces.IBaza1Service' of constructor 'Void .ctor(Interfaces.IBaza1Service, Interfaces.IBaza2Service, Interfaces.IMongoService)'.

Może w ogóle moje podejście do tego jest niepoprawne?

0

Wydaje mi się, że aby móc wstrzyknąć dwie instancje tego samego typu przez konstruktor musisz je jakoś udekorować atrybutami z Autofaca, aby wiedział co ma pod co podstawić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1