我有这个结构图配置和ITaskFactory for fluentScheduler。
public class StructureMapRegistry : Registry
{
public StructureMapRegistry()
{
Scan(x =>
{
x.AssembliesFromApplicationBaseDirectory();
x.WithDefaultConventions();
});
//implementace daného rozhraní naplní stejně jmenující se třídou.
For<IPlayerService>().Use<PlayerService>().Singleton();
For<IWorldService>().Use<WorldService>().Singleton();
For<IQuestService>().Use<QuestService>().Singleton();
For<IHeroesService>().Use<HeroesService>().Singleton();
For<ISaveChangesService>().Use<SaveChangesService>().Singleton();
For<IAddHeroesQuests>().Use<AddHeroesQuests>().Singleton();
IncludeRegistry(new IoC());
}
}
public class StructureMapTaskFactory : ITaskFactory
{
public ITask GetTaskInstance<T>() where T : ITask
{
return ObjectFactory.Container.GetInstance<T>();
}
}
我遇到了这个例外。
{StructureMap.StructureMapConfigurationException: No default Instance is registered and cannot be automatically determined for type 'TheGame.Tasks.IAddHeroesQuests' There is no configuration specified for TheGame.Tasks.IAddHeroesQuests 1.) Container.GetInstance(TheGame.Tasks.IAddHeroesQuests) v StructureMap.SessionCache.GetDefault(Type pluginType, IPipelineGraph pipelineGraph) v c:\BuildAgent\work\996e173a8ceccdca\src\StructureMap\SessionCache.cs:řádek 63 v StructureMap.BuildSession.GetInstance(Type pluginType) v c:\BuildAgent\work\996e173a8ceccdca\src\StructureMap\BuildSession.cs:řádek 60 v StructureMap.Container.GetInstance(Type pluginType) v c:\BuildAgent\work\996e173a8ceccdca\src\StructureMap\Container.cs:řádek 336 v StructureMap.Container.GetInstance[T]() v c:\BuildAgent\work\996e173a8ceccdca\src\StructureMap\Container.cs:řádek 201 v TheGame.StructureMapTaskFactory.GetTaskInstance[T]() v d:\Programovani\VisualStudio\Testy\TheGame\thegame\TheGame\Global.asax.cs:řádek 101 v FluentScheduler.Registry.b__2[T]() v c:\TeamCity\buildAgent\work\21c2d4ee90f3f489\FluentScheduler\Registry.cs:řádek 50 v System.Threading.Tasks.Task.InnerInvoke() v System.Threading.Tasks.Task.Execute()}
我不知道为什么。
答案 0 :(得分:0)
依赖注入
FluentScheduler使您可以轻松使用您选择的IoC工具来创建作业实例。只需实现IJobFactory。
使用StructureMap的示例:
using FluentScheduler;
using StructureMap;
public class StructureMapJobFactory : IJobFactory
{
public IJob GetJobInstance<T>() where T : IJob
{
return ObjectFactory.Container.GetInstance<T>();
}
}
public class MyRegistry : Registry
{
public MyRegistry()
{
// Schedule an IJob to run at an interval
Schedule<MyJob>().ToRunNow().AndEvery(2).Seconds();
}
}
使用JobManager注册新作业工厂: 这部分是你的代码。你需要告诉JobManager.JobFactory是StructuremapJobFactory,就像你说你的依赖注入器是这样。
protected void Application_Start()
{
JobManager.JobFactory = new StructureMapJobFactory(); // THIS PART IS MISSING ON YOUR CODE
JobManager.Initialize(new MyRegistry());
}