我已经将Hangfire.Ninject包安装到一个ASPMVC5应用程序中,这样我就可以运行一些后台作业。
我已经通读了文档,但我对如何实现它感到困惑。
我的现有配置为我的IUnitOfwork类使用了InRequestScope,以确保每个IUnitOfwork请求只实例化一个实例,如下所示:
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
} 为了在hangfire中使用ninject,遵循文档,我在我的ninjectwebcommon.cs类中更新了配置,如下所示:
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
try
{
kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
GlobalConfiguration.Configuration.UseNinjectActivator(kernel);
RegisterServices(kernel);
return kernel;
}
catch
{
kernel.Dispose();
throw;
}
}
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IUnitOfWork>()
.ToSelf()
.InNamedOrBackgroundJobScope(context => context.Kernel.Components.GetAll<INinjectHttpApplicationPlugin>()
.Select(c => c.GetRequestScope(context))
.FirstOrDefault(s => s != null));
}但现在我得到了以下错误:
Error activating IUnitOfWork using self-binding of IUnitOfWork
No constructor was available to create an instance of the implementation type.我有一个使用hangfire处理后台工作的类,如下所示:
public class EmailJob
{
private readonly IUnitOfWork _unitOfWork;
private readonly IMailer _mailer;
public EmailJob(IUnitOfWork unitOfWork, IMailer mailer)
{
_unitOfWork = unitOfWork;
_notificationMailer = notificationMailer;
}
public void Execute()
{
// DO Stuff
}
}有人知道我做错了什么吗?文档还说明:
Services registered with InRequestScope() directive will be unavailable during job activation, you should re-register these services without this hint.这是什么意思?我仍然希望确保每个http请求只使用一个实现dbContext的IUnitOfwork类。如果我删除InRequestScope,这将如何影响应用程序的其余部分?
发布于 2016-09-14 16:14:27
我认为问题在于你正在将IUnitOfWork绑定到它自己。对象需要一个具体的类来激活像UnitOfWork这样的东西。
kernel.Bind<IUnitOfWork>()
.To<UnitOfWork()
.InNamedOrBackgroundJobScope(context => context.Kernel.Components.GetAll<INinjectHttpApplicationPlugin>()
.Select(c => c.GetRequestScope(context))
.FirstOrDefault(s => s != null));https://stackoverflow.com/questions/38816781
复制相似问题