我正在尝试使用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;。