C# 按类型解析泛型
我需要从Autofac的LifeTimeScope解决一些石英作业。目前我已经实现了factory类:C# 按类型解析泛型,c#,generics,types,autofac,quartz.net,C#,Generics,Types,Autofac,Quartz.net,我需要从Autofac的LifeTimeScope解决一些石英作业。目前我已经实现了factory类: public class JobWrapper<T> : IJob where T : IJob 公共类JobWrapper:IJob其中T:IJob 在另一个类中,我有一个返回已解析作业的方法: public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler) { Type type
public class JobWrapper<T> : IJob where T : IJob
公共类JobWrapper:IJob其中T:IJob
在另一个类中,我有一个返回已解析作业的方法:
public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
{
Type type = bundle.JobDetail.JobType;
return _lifetimeScope.Resolve<JobWrapper<type>>(); // does not work
}
public IJob NewJob(TriggerFiredBundle包,IScheduler调度器)
{
类型类型=bundle.JobDetail.JobType;
return _lifetimeScope.Resolve();//不起作用
}
我需要将泛型传递给JobWrapper类,但目前我不知道如何进行传递。您可以自己描述类型
// The type will be the Type for JobWrapper<CleanJob>
var type = typeof(JobWrapper<>).MakeGenericType(typeof(CleanJob));
return (IJob)container.Resolve(type);
// CleanJob decleration
public class CleanJob : IJob
//该类型将是JobWrapper的类型
var type=typeof(JobWrapper).MakeGenericType(typeof(CleanJob));
返回(IJob)容器。解析(类型);
//洁净工作性腹泻
公共类CleanJob:IJob
有一些关于MakeGenericType和的好例子。您可以自己描述该类型
// The type will be the Type for JobWrapper<CleanJob>
var type = typeof(JobWrapper<>).MakeGenericType(typeof(CleanJob));
return (IJob)container.Resolve(type);
// CleanJob decleration
public class CleanJob : IJob
//该类型将是JobWrapper的类型
var type=typeof(JobWrapper).MakeGenericType(typeof(CleanJob));
返回(IJob)容器。解析(类型);
//洁净工作性腹泻
公共类CleanJob:IJob
有一些关于MakeGenericType和的好例子。您可以自己描述该类型
// The type will be the Type for JobWrapper<CleanJob>
var type = typeof(JobWrapper<>).MakeGenericType(typeof(CleanJob));
return (IJob)container.Resolve(type);
// CleanJob decleration
public class CleanJob : IJob
//该类型将是JobWrapper的类型
var type=typeof(JobWrapper).MakeGenericType(typeof(CleanJob));
返回(IJob)容器。解析(类型);
//洁净工作性腹泻
公共类CleanJob:IJob
有一些关于MakeGenericType和的好例子。您可以自己描述该类型
// The type will be the Type for JobWrapper<CleanJob>
var type = typeof(JobWrapper<>).MakeGenericType(typeof(CleanJob));
return (IJob)container.Resolve(type);
// CleanJob decleration
public class CleanJob : IJob
//该类型将是JobWrapper的类型
var type=typeof(JobWrapper).MakeGenericType(typeof(CleanJob));
返回(IJob)容器。解析(类型);
//洁净工作性腹泻
公共类CleanJob:IJob
有一些关于MakeGenericType和的好例子。好吧,我想出来了:
public class InjectorJobFactory : IJobFactory
{
private readonly ILifetimeScope _lifetimeScope;
public InjectorJobFactory(ILifetimeScope lifetimeScope)
{
_lifetimeScope = lifetimeScope;
}
public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
{
var type = typeof(JobWrapper<>).MakeGenericType(bundle.JobDetail.JobType);
return (IJob)_lifetimeScope.Resolve(type);
}
public void ReturnJob(IJob job)
{
}
}
公共类InjectorJobFactory:IJobFactory
{
专用只读ILifetimeScope\u lifetimeScope;
公共注射剂工厂(ILifetimeScope寿命范围)
{
_寿命范围=寿命范围;
}
公共IJob NewJob(TriggerFiredBundle包,IScheduler调度器)
{
var type=typeof(JobWrapper.MakeGenericType(bundle.JobDetail.JobType);
返回(IJob)\u生存时间范围。解析(类型);
}
公共作业(IJob作业)
{
}
}
我刚刚创建了另一个方法,然后使用MakeGenericMethod嗯,我找到了:
public class InjectorJobFactory : IJobFactory
{
private readonly ILifetimeScope _lifetimeScope;
public InjectorJobFactory(ILifetimeScope lifetimeScope)
{
_lifetimeScope = lifetimeScope;
}
public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
{
var type = typeof(JobWrapper<>).MakeGenericType(bundle.JobDetail.JobType);
return (IJob)_lifetimeScope.Resolve(type);
}
public void ReturnJob(IJob job)
{
}
}
公共类InjectorJobFactory:IJobFactory
{
专用只读ILifetimeScope\u lifetimeScope;
公共注射剂工厂(ILifetimeScope寿命范围)
{
_寿命范围=寿命范围;
}
公共IJob NewJob(TriggerFiredBundle包,IScheduler调度器)
{
var type=typeof(JobWrapper.MakeGenericType(bundle.JobDetail.JobType);
返回(IJob)\u生存时间范围。解析(类型);
}
公共作业(IJob作业)
{
}
}
我刚刚创建了另一个方法,然后使用MakeGenericMethod嗯,我找到了:
public class InjectorJobFactory : IJobFactory
{
private readonly ILifetimeScope _lifetimeScope;
public InjectorJobFactory(ILifetimeScope lifetimeScope)
{
_lifetimeScope = lifetimeScope;
}
public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
{
var type = typeof(JobWrapper<>).MakeGenericType(bundle.JobDetail.JobType);
return (IJob)_lifetimeScope.Resolve(type);
}
public void ReturnJob(IJob job)
{
}
}
公共类InjectorJobFactory:IJobFactory
{
专用只读ILifetimeScope\u lifetimeScope;
公共注射剂工厂(ILifetimeScope寿命范围)
{
_寿命范围=寿命范围;
}
公共IJob NewJob(TriggerFiredBundle包,IScheduler调度器)
{
var type=typeof(JobWrapper.MakeGenericType(bundle.JobDetail.JobType);
返回(IJob)\u生存时间范围。解析(类型);
}
公共作业(IJob作业)
{
}
}
我刚刚创建了另一个方法,然后使用MakeGenericMethod嗯,我找到了:
public class InjectorJobFactory : IJobFactory
{
private readonly ILifetimeScope _lifetimeScope;
public InjectorJobFactory(ILifetimeScope lifetimeScope)
{
_lifetimeScope = lifetimeScope;
}
public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
{
var type = typeof(JobWrapper<>).MakeGenericType(bundle.JobDetail.JobType);
return (IJob)_lifetimeScope.Resolve(type);
}
public void ReturnJob(IJob job)
{
}
}
公共类InjectorJobFactory:IJobFactory
{
专用只读ILifetimeScope\u lifetimeScope;
公共注射剂工厂(ILifetimeScope寿命范围)
{
_寿命范围=寿命范围;
}
公共IJob NewJob(TriggerFiredBundle包,IScheduler调度器)
{
var type=typeof(JobWrapper.MakeGenericType(bundle.JobDetail.JobType);
返回(IJob)\u生存时间范围。解析(类型);
}
公共作业(IJob作业)
{
}
}
我刚刚创建了另一个方法,然后刚刚使用MakeGenericMethod是一个实现IJob接口的类,它在哪里定义?如何注册
JobWrapper
类?updater.RegisterGeneric(typeof(JobWrapper));是一个实现IJob接口的类,它在哪里定义?如何注册JobWrapper
class?updater.RegisterGeneric(typeof(JobWrapper));是一个实现IJob接口的类,它在哪里定义?如何注册JobWrapper
class?updater.RegisterGeneric(typeof(JobWrapper));是一个实现IJob接口的类,它在哪里定义?如何注册JobWrapper
class?updater.RegisterGeneric(typeof(JobWrapper));当然string
不会实现IJob
。。。否则答案不错。@galenus,我从来没说过。类型为JobWrapper
。在JobWrapper
声明中,对T
有一个通用约束。它不仅是一个IJob
本身,而且还包装了一个IJob
。以前尝试过,但无法解析符号“bundle”。var type=typeof(JobWrapper.MakeGenericType(typeof(bundle.jobdail.JobType))@Daemon025bundle
是成员而不是类型。什么是作业类型
?如果它的类型是type
的,那么它就没有理由工作。当然string
不会实现IJob
。。。否则答案不错。@galenus,我从来没说过。类型为JobWrapper
。在JobWrapper
声明中,对T
有一个通用约束。它不仅是一个IJob
本身,而且还包装了一个IJob
。以前尝试过,但无法解析符号“bundle”。var type=typeof(JobWrapper.MakeGenericType(typeof(bundle.jobdail.JobType))@Daemon025bundle
是一个成员