如何动态传递类型到Activator.CreateInstance(对象)?

时间:2018-03-03 01:32:29

标签: c# activator

我正在尝试使用Activator.CreateInstace()

实现通用解决方案

下面我有界面,

public interface INewReleaseValidationRule<T> where T : INewReleaseValidationEntity
{
    void Run(CtxNewRelease ctx, IEnumerable<T> entities);
    string GetMessage(string messageName, string fallbackMessage);
}

public interface INewReleaseValidationEntity
{}

我的班级CustomerAssociation是:

public class CustomerAssociation : INewReleaseValidationEntity
{
 public void Run(Context.Ctx context, IList<INewReleaseValidationEntity> entitiesObject)
    {}
}

然后我的视图模型也在实现INewReleaseValidationEntity

 public class ForecastViewModel : INewReleaseValidationEntity
{

}

然后,

public partial class ValidationRule
{
public void Run(Ctx context, List<ForecastViewModel > entity)
    {
        var validation = this.GetExecutionType();
        var execution = (INewReleaseValidationRule<entity>)Activator.CreateInstance(validation);
        execution.Run(context, entity.ToArray());
    }
}

在上面突出显示的声明中,我收到错误。

如果我使用,

var execution = (CustomerAssociation)Activator.CreateInstance(validation);

然后它完美无缺。但是我想动态地提供显式类型(在本例中为CustomerAssociation)。

我的所有显式类型(即CustomerAssociation)和其他类型都将继承自INewReleaseValidationRule<T>

如果我写

var execution = (INewReleaseValidationRule<ForecastViewModel>)Activator.CreateInstance(validation);

然后得到运行时错误,

  

无法投射类型&#39; CustomerAssociation&#39;输入&#39; INewReleaseValidationRule`1 [ForecastEstimateViewModel]&#39;。

0 个答案:

没有答案