No parametless constructor defined Hangfire Ninject
up vote
0
down vote
favorite
I'm having a problem activating instance of my class with no parametless constructor defined.
The constructor:
public HangfireExecutor(ICommandDispatcher commandDispatcher, IQueryDispatcher queryDispatcher, IMapper mapper)
How I register and configure Hangfire (three dots are used instead of sensitive info):
[assembly: OwinStartupAttribute(typeof(Web2.Startup))]
public partial class Startup
private IAppBuilder _app;
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
_app = app;
GlobalConfiguration.Configuration.UseSqlServerStorage("...");
_app.UseHangfireDashboard("/...", new DashboardOptions
{
Authorization = new { new HangfireDashboardAuthorizationFilter() },
AppPath = "/Identity/Create"
});
_app.UseHangfireServer();
_app.UseNinjectMiddleware(CreateKernel);
}
Registration in IoC container:
public partial class Startup
{
...
protected IKernel CreateKernel()
{
var kernel = new StandardKernel();
...
kernel.Bind<HangfireExecutor>().ToSelf().InBackgroundJobScope();
GlobalConfiguration.Configuration.UseNinjectActivator(kernel);
return kernel;
The error:
System.MissingMethodException
No parameterless constructor defined for this object hangfire ninject System.RuntimeTypeHandle.CreateInstance
System.MissingMethodException: No parameterless constructor defined for this object
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Activator.CreateInstance(Type type)
at Hangfire.JobActivator.ActivateJob(Type jobType)
at Hangfire.JobActivator.SimpleJobActivatorScope.Resolve(Type type)
at Hangfire.Server.CoreBackgroundJobPerformer.Perform(PerformContext context)
For me it looks like the Hangfire does not use Ninject activator (?) but I don't know why.
I've followed both tutorials: on Hangfire site and Hangfire.Ninject github and several github repos and SO questions.
Instatiating other classes not used by Hangfire works well; also instatiating Hangfire executor with parametless constructor works properly.
I'm using:
- ASP .NET MVC 5
- .NET Framework 4.6.1,
- Hangfire 1.6.21
- Hangfire.Ninject 1.2
asp.net-mvc-5 ninject hangfire .net-4.6.1 hangfire.ninject
add a comment |
up vote
0
down vote
favorite
I'm having a problem activating instance of my class with no parametless constructor defined.
The constructor:
public HangfireExecutor(ICommandDispatcher commandDispatcher, IQueryDispatcher queryDispatcher, IMapper mapper)
How I register and configure Hangfire (three dots are used instead of sensitive info):
[assembly: OwinStartupAttribute(typeof(Web2.Startup))]
public partial class Startup
private IAppBuilder _app;
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
_app = app;
GlobalConfiguration.Configuration.UseSqlServerStorage("...");
_app.UseHangfireDashboard("/...", new DashboardOptions
{
Authorization = new { new HangfireDashboardAuthorizationFilter() },
AppPath = "/Identity/Create"
});
_app.UseHangfireServer();
_app.UseNinjectMiddleware(CreateKernel);
}
Registration in IoC container:
public partial class Startup
{
...
protected IKernel CreateKernel()
{
var kernel = new StandardKernel();
...
kernel.Bind<HangfireExecutor>().ToSelf().InBackgroundJobScope();
GlobalConfiguration.Configuration.UseNinjectActivator(kernel);
return kernel;
The error:
System.MissingMethodException
No parameterless constructor defined for this object hangfire ninject System.RuntimeTypeHandle.CreateInstance
System.MissingMethodException: No parameterless constructor defined for this object
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Activator.CreateInstance(Type type)
at Hangfire.JobActivator.ActivateJob(Type jobType)
at Hangfire.JobActivator.SimpleJobActivatorScope.Resolve(Type type)
at Hangfire.Server.CoreBackgroundJobPerformer.Perform(PerformContext context)
For me it looks like the Hangfire does not use Ninject activator (?) but I don't know why.
I've followed both tutorials: on Hangfire site and Hangfire.Ninject github and several github repos and SO questions.
Instatiating other classes not used by Hangfire works well; also instatiating Hangfire executor with parametless constructor works properly.
I'm using:
- ASP .NET MVC 5
- .NET Framework 4.6.1,
- Hangfire 1.6.21
- Hangfire.Ninject 1.2
asp.net-mvc-5 ninject hangfire .net-4.6.1 hangfire.ninject
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I'm having a problem activating instance of my class with no parametless constructor defined.
The constructor:
public HangfireExecutor(ICommandDispatcher commandDispatcher, IQueryDispatcher queryDispatcher, IMapper mapper)
How I register and configure Hangfire (three dots are used instead of sensitive info):
[assembly: OwinStartupAttribute(typeof(Web2.Startup))]
public partial class Startup
private IAppBuilder _app;
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
_app = app;
GlobalConfiguration.Configuration.UseSqlServerStorage("...");
_app.UseHangfireDashboard("/...", new DashboardOptions
{
Authorization = new { new HangfireDashboardAuthorizationFilter() },
AppPath = "/Identity/Create"
});
_app.UseHangfireServer();
_app.UseNinjectMiddleware(CreateKernel);
}
Registration in IoC container:
public partial class Startup
{
...
protected IKernel CreateKernel()
{
var kernel = new StandardKernel();
...
kernel.Bind<HangfireExecutor>().ToSelf().InBackgroundJobScope();
GlobalConfiguration.Configuration.UseNinjectActivator(kernel);
return kernel;
The error:
System.MissingMethodException
No parameterless constructor defined for this object hangfire ninject System.RuntimeTypeHandle.CreateInstance
System.MissingMethodException: No parameterless constructor defined for this object
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Activator.CreateInstance(Type type)
at Hangfire.JobActivator.ActivateJob(Type jobType)
at Hangfire.JobActivator.SimpleJobActivatorScope.Resolve(Type type)
at Hangfire.Server.CoreBackgroundJobPerformer.Perform(PerformContext context)
For me it looks like the Hangfire does not use Ninject activator (?) but I don't know why.
I've followed both tutorials: on Hangfire site and Hangfire.Ninject github and several github repos and SO questions.
Instatiating other classes not used by Hangfire works well; also instatiating Hangfire executor with parametless constructor works properly.
I'm using:
- ASP .NET MVC 5
- .NET Framework 4.6.1,
- Hangfire 1.6.21
- Hangfire.Ninject 1.2
asp.net-mvc-5 ninject hangfire .net-4.6.1 hangfire.ninject
I'm having a problem activating instance of my class with no parametless constructor defined.
The constructor:
public HangfireExecutor(ICommandDispatcher commandDispatcher, IQueryDispatcher queryDispatcher, IMapper mapper)
How I register and configure Hangfire (three dots are used instead of sensitive info):
[assembly: OwinStartupAttribute(typeof(Web2.Startup))]
public partial class Startup
private IAppBuilder _app;
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
_app = app;
GlobalConfiguration.Configuration.UseSqlServerStorage("...");
_app.UseHangfireDashboard("/...", new DashboardOptions
{
Authorization = new { new HangfireDashboardAuthorizationFilter() },
AppPath = "/Identity/Create"
});
_app.UseHangfireServer();
_app.UseNinjectMiddleware(CreateKernel);
}
Registration in IoC container:
public partial class Startup
{
...
protected IKernel CreateKernel()
{
var kernel = new StandardKernel();
...
kernel.Bind<HangfireExecutor>().ToSelf().InBackgroundJobScope();
GlobalConfiguration.Configuration.UseNinjectActivator(kernel);
return kernel;
The error:
System.MissingMethodException
No parameterless constructor defined for this object hangfire ninject System.RuntimeTypeHandle.CreateInstance
System.MissingMethodException: No parameterless constructor defined for this object
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Activator.CreateInstance(Type type)
at Hangfire.JobActivator.ActivateJob(Type jobType)
at Hangfire.JobActivator.SimpleJobActivatorScope.Resolve(Type type)
at Hangfire.Server.CoreBackgroundJobPerformer.Perform(PerformContext context)
For me it looks like the Hangfire does not use Ninject activator (?) but I don't know why.
I've followed both tutorials: on Hangfire site and Hangfire.Ninject github and several github repos and SO questions.
Instatiating other classes not used by Hangfire works well; also instatiating Hangfire executor with parametless constructor works properly.
I'm using:
- ASP .NET MVC 5
- .NET Framework 4.6.1,
- Hangfire 1.6.21
- Hangfire.Ninject 1.2
asp.net-mvc-5 ninject hangfire .net-4.6.1 hangfire.ninject
asp.net-mvc-5 ninject hangfire .net-4.6.1 hangfire.ninject
asked Nov 21 at 12:26
ignacy130
1821115
1821115
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
accepted
As method _app.UseNinjectMiddleware(CreateKernel);
does not create kernel (just keeps delegate to the metod creating the kernel) the correct order of commands in Hangfire configuration in my case should be:
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
_app = app;
GlobalConfiguration.Configuration.UseSqlServerStorage("...");
_app.UseHangfireDashboard("/...", new DashboardOptions
{
Authorization = new { new HangfireDashboardAuthorizationFilter() },
AppPath = "/Identity/Create"
});
_app.UseNinjectMiddleware(CreateKernel);
}
and then at the end of CreateKernel
method:
kernel.Bind<HangfireExecutor>().ToSelf().InBackgroundJobScope();
GlobalConfiguration.Configuration.UseNinjectActivator(kernel);
_app.UseHangfireServer();
return kernel;
Now Hangfire started resolving dependencies. I think that it is important to create kernel as soon after starting the app as possible - otherwise Hangfire may not be initialized and background jobs will not be executed.
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
accepted
As method _app.UseNinjectMiddleware(CreateKernel);
does not create kernel (just keeps delegate to the metod creating the kernel) the correct order of commands in Hangfire configuration in my case should be:
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
_app = app;
GlobalConfiguration.Configuration.UseSqlServerStorage("...");
_app.UseHangfireDashboard("/...", new DashboardOptions
{
Authorization = new { new HangfireDashboardAuthorizationFilter() },
AppPath = "/Identity/Create"
});
_app.UseNinjectMiddleware(CreateKernel);
}
and then at the end of CreateKernel
method:
kernel.Bind<HangfireExecutor>().ToSelf().InBackgroundJobScope();
GlobalConfiguration.Configuration.UseNinjectActivator(kernel);
_app.UseHangfireServer();
return kernel;
Now Hangfire started resolving dependencies. I think that it is important to create kernel as soon after starting the app as possible - otherwise Hangfire may not be initialized and background jobs will not be executed.
add a comment |
up vote
0
down vote
accepted
As method _app.UseNinjectMiddleware(CreateKernel);
does not create kernel (just keeps delegate to the metod creating the kernel) the correct order of commands in Hangfire configuration in my case should be:
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
_app = app;
GlobalConfiguration.Configuration.UseSqlServerStorage("...");
_app.UseHangfireDashboard("/...", new DashboardOptions
{
Authorization = new { new HangfireDashboardAuthorizationFilter() },
AppPath = "/Identity/Create"
});
_app.UseNinjectMiddleware(CreateKernel);
}
and then at the end of CreateKernel
method:
kernel.Bind<HangfireExecutor>().ToSelf().InBackgroundJobScope();
GlobalConfiguration.Configuration.UseNinjectActivator(kernel);
_app.UseHangfireServer();
return kernel;
Now Hangfire started resolving dependencies. I think that it is important to create kernel as soon after starting the app as possible - otherwise Hangfire may not be initialized and background jobs will not be executed.
add a comment |
up vote
0
down vote
accepted
up vote
0
down vote
accepted
As method _app.UseNinjectMiddleware(CreateKernel);
does not create kernel (just keeps delegate to the metod creating the kernel) the correct order of commands in Hangfire configuration in my case should be:
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
_app = app;
GlobalConfiguration.Configuration.UseSqlServerStorage("...");
_app.UseHangfireDashboard("/...", new DashboardOptions
{
Authorization = new { new HangfireDashboardAuthorizationFilter() },
AppPath = "/Identity/Create"
});
_app.UseNinjectMiddleware(CreateKernel);
}
and then at the end of CreateKernel
method:
kernel.Bind<HangfireExecutor>().ToSelf().InBackgroundJobScope();
GlobalConfiguration.Configuration.UseNinjectActivator(kernel);
_app.UseHangfireServer();
return kernel;
Now Hangfire started resolving dependencies. I think that it is important to create kernel as soon after starting the app as possible - otherwise Hangfire may not be initialized and background jobs will not be executed.
As method _app.UseNinjectMiddleware(CreateKernel);
does not create kernel (just keeps delegate to the metod creating the kernel) the correct order of commands in Hangfire configuration in my case should be:
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
_app = app;
GlobalConfiguration.Configuration.UseSqlServerStorage("...");
_app.UseHangfireDashboard("/...", new DashboardOptions
{
Authorization = new { new HangfireDashboardAuthorizationFilter() },
AppPath = "/Identity/Create"
});
_app.UseNinjectMiddleware(CreateKernel);
}
and then at the end of CreateKernel
method:
kernel.Bind<HangfireExecutor>().ToSelf().InBackgroundJobScope();
GlobalConfiguration.Configuration.UseNinjectActivator(kernel);
_app.UseHangfireServer();
return kernel;
Now Hangfire started resolving dependencies. I think that it is important to create kernel as soon after starting the app as possible - otherwise Hangfire may not be initialized and background jobs will not be executed.
edited Nov 22 at 14:49
answered Nov 22 at 8:50
ignacy130
1821115
1821115
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53412014%2fno-parametless-constructor-defined-hangfire-ninject%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown