C# 按类型解析泛型

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

我需要从Autofac的LifeTimeScope解决一些石英作业。目前我已经实现了factory类:

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))@Daemon025
bundle
是成员而不是类型。什么是
作业类型
?如果它的类型是
type
的,那么它就没有理由工作。当然
string
不会实现
IJob
。。。否则答案不错。@galenus,我从来没说过。类型为
JobWrapper
。在
JobWrapper
声明中,对
T
有一个通用约束。它不仅是一个
IJob
本身,而且还包装了一个
IJob
。以前尝试过,但无法解析符号“bundle”。var type=typeof(JobWrapper.MakeGenericType(typeof(bundle.jobdail.JobType))@Daemon025
bundle
是一个成员