Ejemplo n.º 1
0
        /// <summary>
        /// Scans the dlls and creates a dictionary in which each message in IFunctions is referenced to each function.
        /// </summary>
        public HandlersContainer(string serviceName, bool lockSaga = true)
        {
            lock (o)
            {
                this.serviceName = serviceName;

                this.lockSaga = SettingsUtil.HasSettings(SETTINGS.LOCKSAGAS)? SettingsUtil.GetSettings <bool>(SETTINGS.LOCKSAGAS):lockSaga;

                AddDependency <ISerializeMessages, JSONSerializer>();
                AddDependency <ISagaLocker, SagaAzureStorageLocker>();
                AddDependency <ISendMessages, AzureStorageQueueSendTransport>(SolveDependency <ISerializeMessages>());
                AddDependency <IPublishEvents, AzureEventHubPublishTransport>(SolveDependency <ISerializeMessages>());

                this.serializer = SolveDependency <ISerializeMessages>();
                this.sagaLocker = SolveDependency <ISagaLocker>();
                AddDependency <ISagaStoragePersistence, SagaAzureStoragePersistence>(this.sagaLocker as ISagaLocker, this.lockSaga);

                sagaPersistence = SolveDependency <ISagaStoragePersistence>();
                messageSender   = SolveDependency <ISendMessages>();

                var assemblies = new List <Assembly>();

                assemblies.Add(Assembly.GetCallingAssembly());
                assemblies.AddRange(Assembly.GetCallingAssembly().GetReferencedAssemblies().Select(a => Assembly.Load(a.FullName)));

                var types = assemblies.SelectMany(a => a.GetTypes());

                LookForSagas(types);

                LookForHandlers(types);

                this.sagaLocker.CreateLocksContainer();
                sagaPersistence.CreateSagaPersistenceTableAsync().Wait();
            }
        }
 public SagaAzureStoragePersistence(ISagaLocker sagaLock, bool lockSagas)
 {
     this.sagaLock  = sagaLock;
     this.lockSagas = lockSagas;
     storageAccount = CloudStorageAccount.Parse(SettingsUtil.GetSettings <string>(SETTINGS.AZURE_STORAGE));
 }