public virtual T Instance <T>() where T : class, IPlugin { var scope = AutofacDependencyResolver.Current.RequestLifetimeScope; if (!scope.TryResolve(PluginType, out var instance)) { //not resolved var constructors = PluginType.GetConstructors(); foreach (var constructor in constructors) { try { var parameters = constructor.GetParameters(); var parameterInstances = new List <object>(); foreach (var parameter in parameters) { var service = scope.Resolve(parameter.ParameterType); if (service == null) { throw new Exception($"Plugin Unknown Dependency ({FriendlyName})"); } parameterInstances.Add(service); } instance = Activator.CreateInstance(PluginType, parameterInstances.ToArray()); break; } catch {} } } if (instance == null) { throw new Exception($"No constructor was found that had all the dependencies satisfied ({FriendlyName})"); } var typedInstance = instance as T; if (typedInstance != null) { typedInstance.PluginDescriptor = this; } return(typedInstance); }