Verwenden von NopCommerce 3.8.NopCommerce Aufgaben-Plugin startet nicht
Ich habe ein neues Misc-Plugin erstellt. Der Zweck ist, eine Aufgabe auszuführen, die meine Web-API für Daten aufrichtig aufruft.
Das folgende ist mein Code:
Plugin Klasse
public class MereSyncPlugin : BasePlugin, IMiscPlugin
{
private MereSyncObjectContext _context;
private IScheduleTaskService _schedualTaskService;
public MereSyncPlugin(MereSyncObjectContext context, IScheduleTaskService schedualTaskService)
{
_context = context;
_schedualTaskService = schedualTaskService;
}
public void GetConfigurationRoute(out string actionName, out string controllerName, out RouteValueDictionary routeValues)
{
actionName = "";
controllerName = "";
routeValues = new RouteValueDictionary()
{
{ "Namespaces", "Nop.plugin.Misc.MereSync.Controllers" },
{ "area", null }
};
}
public override void Install()
{
//TODO: add more
_schedualTaskService.InsertTask(new Nop.Core.Domain.Tasks.ScheduleTask()
{
Enabled = true,
Name = "Product Sync",
Seconds = 3600,
StopOnError = false,
Type = "Nop.Plugin.Misc.MereSync.ProductSyncTask, Nop.Plugin.Misc.MereSync"
});
//_context.Install();
base.Install();
}
public override void Uninstall()
{
Nop.Core.Domain.Tasks.ScheduleTask task = _schedualTaskService.GetTaskByType("Nop.Plugin.Misc.MereSync.ProductSyncTask, Nop.Plugin.Misc.MereSync");
if (task != null)
_schedualTaskService.DeleteTask(task);
//_context.Uninstall();
base.Uninstall();
}
}
Objektkontextklasse (wenn auch nicht so an dieser Stelle eingerichtet, einige Teile auf Kommentar)
public class MereSyncObjectContext : DbContext, IDbContext
{
public bool ProxyCreationEnabled
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public bool AutoDetectChangesEnabled
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public MereSyncObjectContext(string nameOrConnectionString) : base(nameOrConnectionString)
{
}
/*protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//TODO: insert ALL model MAPPINGS!!!!
//modelBuilder.Configurations.Add(new insertnewmap());
base.OnModelCreating(modelBuilder);
}*/
public string CreateDatabaseInstallationScript()
{
return ((IObjectContextAdapter)this).ObjectContext.CreateDatabaseScript();
}
public void Install()
{
Database.SetInitializer<MereSyncObjectContext>(null);
Database.ExecuteSqlCommand(CreateDatabaseInstallationScript());
SaveChanges();
}
public void Uninstall()
{
//this.DropPluginTable("MereSys_TableName");
}
IDbSet<TEntity> IDbContext.Set<TEntity>()
{
return base.Set<TEntity>();
}
public IList<TEntity> ExecuteStoredProcedureList<TEntity>(string commandText, params object[] parameters) where TEntity : BaseEntity, new()
{
throw new NotImplementedException();
}
public IEnumerable<TElement> SqlQuery<TElement>(string sql, params object[] parameters)
{
throw new NotImplementedException();
}
public int ExecuteSqlCommand(string sql, bool doNotEnsureTransaction = false, int? timeout = default(int?), params object[] parameters)
{
throw new NotImplementedException();
}
public void Detach(object entity)
{
throw new NotImplementedException();
}
}
Aufgabenklasse
public class ProductSyncTask : ITask
{
private readonly ILogger _logger;
public ProductSyncTask(ILogger logger)
{
this._logger = logger;
}
public async void Execute()
{
//TODO: Call My method, USE BEST PRACTICE, IoC DI
//throw new NotImplementedException();
_logger.InsertLog(Nop.Core.Domain.Logging.LogLevel.Information, "Start", "Product sync has started");
ProductSyncService test = new ProductSyncService();
await test.GetProductsAsync();
}
}
Frage
Wenn ich im nopCommerce Backend in die Protokolldatei Navigieren
Admin-Bereich> System> log
Ich erwartete mein log statment zu sehen da, aber nichts zeigt.
Also überprüfe ich auch den Zeitplan der Aufgabe, es hat nie gestartet. Breakpoints werden auch für meine Task-Klasse im Debug-Modus eingerichtet und werden nie getroffen.
Also, fehlt mir hier etwas? Ist meine Implementierung korrekt?
Hinweise:
ich den Asynchron-Anruf entfernt haben, aber es hat nichts (als nie die Klassenstufe zu erreichen). Bereinigt und neu erstellt, setzen Sie gegebenenfalls die lokale Kopie false. Das Plugin ist installiert. Die Ereignisanzeige auf dem Computer zeigt keine Warnungen oder Fehler in Bezug auf NOPCommerce an. Die "Jetzt ausführen" -Schaltfläche, wenn sie gedrückt wird, aktualisiert die Seite, aber es werden weder ein Hinweis-Task ausgeführt, noch meine Klassen-Breakpoints im Debug-Modus.
Quelldatei Source
Plugin enthält meinen Code so weit, die meisten überflüssig ist nicht d.h Rest Client usw. verwendet wie im haupt nicht zu diesem Zeitpunkt der Strömung zu bekommen.
Vergewissern Sie sich, dass Sie Ihr Plugin installiert haben, das Sie hier nicht erwähnt haben! –
bearbeitet Post, jetzt sagt Das Plugin ist installiert – lemunk
Kleine Lösung: 'Type =" Nop.Plugin.Misc.MereSync.ProductSyncTask, ... "' sollte 'Type =" Nop.Plugin.Misc.MereSync.ProductSyncTask, Nop sein .Plugin.Misc.MereSync.MereSyncPlugin "auf' Install'. Modifizieren und prüfen! –