示例#1
0
 public static void Start()
 {
     ReadModelRegistration.Register();
     TableReadmodelConnection.CheckForTables();
     EventStoreConnection.StartConnection();
     EventStoreConnection.ReadSavedEvents();
 }
        public static void Publish(EventFromES anEvent)
        {
            dynamic readmodelData;
            string  nspace = "Ops.ReadModels";
            var     q      = from t in Assembly.GetExecutingAssembly().GetTypes()
                             where t.IsClass && t.Namespace == nspace
                             select t;

            foreach (var readModel in q)
            {
                string[] rMName  = readModel.Name.ToString().Split("Data");
                string[] rMName2 = readModel.Name.ToString().Split("Read");
                if (rMName.Length == 1 && rMName2.Length > 1)
                {
                    try
                    {
                        MethodInfo theMethod  = typeof(ReadModels.ReadModel).GetMethod("EventPublish", new[] { typeof(EventFromES) });
                        string     methodName = readModel.Name.ToString();
                        string     nameSpace  = readModel.Namespace.ToString();
                        string     key        = methodName.Split("Read")[0];
                        if (Book.book.ContainsKey(key))
                        {
                            string fullClassName     = nameSpace + "." + methodName;
                            object readModelToInvoke = Activator.CreateInstance(Type.GetType(fullClassName));
                            readmodelData = theMethod.Invoke(readModelToInvoke, new EventFromES[] { anEvent });
                        }
                        else
                        {
                            Book.book.Add(key, new List <ReadModelData>());
                            string fullClassName     = nameSpace + "." + methodName;
                            object readModelToInvoke = Activator.CreateInstance(Type.GetType(fullClassName));
                            readmodelData = theMethod.Invoke(readModelToInvoke, new EventFromES[] { anEvent });
                        }
                        if (key.Split("Table").Length > 1 && readmodelData != null)
                        {
                            TableReadmodelConnection.UpdateTable(readmodelData, key);
                        }
                    }
                    catch (Exception e)
                    {
                        Console.Write(e);
                    }
                }
            }
        }