/// <summary> /// Creates service. /// </summary> /// <param name="assemblyName">Assembly where the service is.</param> /// <param name="type">Service type.</param> /// <returns>Created service.</returns> public static StiService CreateService(string assemblyName, string type) { Assembly a = StiAssemblyFinder.GetAssembly(assemblyName); if (a != null) { lock (AssemblyToTypes) { Type [] typesInAssembly = GetTypesFromAssembly(a); lock (StiTypeFinder.TypeToString) { Type tp = StiTypeFinder.TypeToString[type] as Type; if (tp == null) { foreach (Type fnTp in typesInAssembly) { string fnStr = fnTp.ToString(); if (fnStr == type) { tp = fnTp; StiTypeFinder.TypeToString[type] = fnTp; break; } } } return((StiService)StiActivator.CreateObject(tp)); } } } return(null); }
/// <summary> /// Returns services which are in the specified assembly. /// </summary> /// <param name="a">Assembly.</param> /// <returns>Services.</returns> public static StiServiceContainer GetServicesFromAssembly(Assembly a) { var serviceContainer = new StiServiceContainer(); if (a != null) { var types = GetTypesFromAssembly(a); Type typeService = typeof(StiService); foreach (Type type in types) { if (StiTypeFinder.FindType(type, typeService) && (!type.IsAbstract)) { try { var service = StiActivator.CreateObject(type) as StiService; if (service != null && service.ServiceType != null) { serviceContainer.Add(service); } } catch { } } } } return(serviceContainer); }