2015-06-01 6 views
1

Я пытаюсь использовать Hangfire с Ninject.Hangfire с Ninject

Вот моя проблема, мой проект изложил, как в следующее:

.Sln 
    |- Core 
    |- Web 

Сейчас в Core является метод замедленного воспламенения:

public class Scheduler 
{ 
    public void HangfireIoc() 
    { 
     BackgroundJob.Enqueue<MovieSaver>(x => x.SaveMovies()); 
    } 
} 

MovieSaver класс (Core):

public class MovieSaver 
{ 
    public IMovieApi Api { get; set; } 

    public MovieSaver(IMovieApi api) 
    { 
     Api = api; 
    } 
    //Other methods 
} 

Startup.cs (in Web)

public void Configuration(IAppBuilder app) 
{ 
    var kernal = new StandardKernel(); 
    GlobalConfiguration.Configuration.UseNinjectActivator(kernal); 

    app.UseHangfireDashboard(); 
    app.UseHangfireServer(); 
} 

У меня есть класс Bindings в Core для Ninject:

public class Bindings : NinjectModule 
{ 
    public override void Load() 
    { 
     Bind<IMovieApi>().To<MovieApi>(); 
    } 
} 

Но, кажется, что, когда замедленное воспламенение начинает работу я получаю:

Ninject.ActivationException 

Error activating IMovieApi No matching bindings are available, and the type is not self-bindable. 
Activation path: 2) Injection of dependency IMovieApi into parameter api of constructor of type MovieSaver 
1) Request for MovieSaver Suggestions: 1) Ensure that you have defined a binding for IMovieApi. 
2) If the binding was defined in a module, ensure that the module has been loaded into the kernel. 
3) Ensure you have not accidentally created more than one kernel. 
4) If you are using constructor arguments, ensure that the parameter name matches the constructors parameter name. 
5) If you are using automatic module loading, ensure the search path and filters are correct. 

Я новичок в Ninject и IoC.

Может ли кто-нибудь спрятать?

ответ

1

Bindings Модуль не загружен. Попробуйте добавить

kernel.Load<Bindings>(); 

к Configuration методе Startup.cs'.

вы также можете загрузить все Module с в сборке по телефону:

kernel.Load(someAssembly); 

. Например:

kernel.Load(typeof(Startup).Assembly); 
2

Новый Ninject.Web.Common.Bootstrapper() Ядро:

public void Configuration(IAppBuilder app) 
    {    

     ConfigureAuth(app); 

     GlobalConfiguration.Configuration 
      .UseSqlServerStorage("ConnectString"); 

     GlobalConfiguration.Configuration.UseNinjectActivator(new Ninject.Web.Common.Bootstrapper().Kernel); 


     app.UseHangfireDashboard(); 
     app.UseHangfireServer(); 

    }