我在ASP.NET 5应用程序中使用Simple Injector,需要从内置的Microsoft DI中切换Identity
个注册。
目前,它看起来像这样;
services.AddIdentity<AppUser, AppRole>(o => {
o.Password.RequiredLength = 6;
o.Password.RequireNonLetterOrDigit = false;
o.Password.RequireDigit = true;
o.Password.RequireLowercase = false;
o.Password.RequireUppercase = false;
})
.AddUserStore<UserStore<AppUser>>()
.AddRoleStore<RoleStore<AppRole>>()
.AddDefaultTokenProviders();
我知道如何使用Container.Register<T>
,但我很难找到在Simple Injector中注册这些特定内容的等效方法。还有其他人做过这个可以提供帮助吗?
我正在尝试这样做,因为我需要使用属性注入;我有一个将使用Quartz.NET
设置的任务,它会自行实例化,就像这样 -
public class HelloJob : IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("Greetings from HelloJob!");
}
}
// define the job and tie it to our HelloJob class
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("job1", "group1")
.Build();
// Trigger the job to run now, and then repeat every 10 seconds
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(10)
.RepeatForever())
.Build();
// Tell quartz to schedule the job using our trigger
scheduler.ScheduleJob(job, trigger);
我需要对HelloJob.Execute
内部的数据库执行某些操作,但由于它不是Controller
(即使它是,它也不会像一个一样被激活),我无法将数据库注入构造函数。
答案 0 :(得分:2)
Quartz.NET允许截获作业的创建,这允许您将创建转发到ASP.NET配置系统或Simple Injector(无论您喜欢什么)。我不熟悉Quartz以及它们现在如何与ASP.NET 5集成,但是IJobFactory
的概念。转发呼叫是实施NewJob()
方法的问题。例如,这是Simple Injector的实现:
public class SimpleInjectorJobFactory : IJobFactory {
private readonly Container container;
public SimpleInjectorJobFactory(Container container) {
this.container = container;
}
public IJob NewJob(TriggerFiredBundle bundle) {
return (IJob)container.GetInstance(bundle.JobDetail.JobType);
}
}
对于ASP.NET 5,实现可能如下所示:
public class SimpleInjectorJobFactory : IJobFactory {
private readonly IServiceProvider container;
public SimpleInjectorJobFactory(IServiceProvider container) {
this.container = container;
}
public IJob NewJob(TriggerFiredBundle bundle) {
return (IJob)container.GetRequiredService(bundle.JobDetail.JobType);
}
}
通过这种方式,您可以简单地将依赖项注入HelloJob
的构造函数中,并且不需要恢复属性注入。防止进行财产注入。
Here's complete example如何将Quartz.NET与Simple Injector集成。