如何创建一个返回带有特定参数的对象的工厂?

时间:2020-07-05 14:49:38

标签: c# oop factory

我有这个通用功能

private static T PostNew<T>() where T : IHttpModel, new()
    {
        var t = HttpModelsFactory.Create<T>();
        var requestT = new RestRequest("/households", Method.POST);
        requestT.AddParameter("application/json", t.ToJson(), ParameterType.RequestBody);
        return t;
    }

它需要创建和发送一个T类型的对象。但是,根据类型是什么,该对象需要具有特定的属性。

class HttpModelsFactory
{
    public static T Create<T>() where T : IHttpModel, new()
    {
        Type typeofT = typeof(T);
        
        if (typeofT.Equals(typeof(Household)))
        {
            return CreateHousehold() as T;
        }
    }

    public static Household CreateHousehold()
    {
        return new Household
        {
            Name = Randoms.RandomString()
        };
    }
}

这将不仅仅包括家庭课程。但是,它当前给我这个错误:“类型参数'T'不能与'as'运算符一起使用,因为它既没有类类型约束也没有'类'约束。”我该如何重构代码以使其正常工作?或者有更好的解决方案?

1 个答案:

答案 0 :(得分:3)

添加@RestControllerAdvice public class CustomValidationExceptionHandler { @ExceptionHandler public ResponseEntity toResponse(CustomValidationException ex) { ErrorMessage errorMessage=new ErrorMessage(400,ex.getMessage,"www.stackoverflow.com"); return new ResponseEntity<ErrorMessage>(errorMessage,HttpStatus.BAD_REQUES); } } 约束,您还可以委托一个对象对创建的对象应用任何操作

class

但是现在这意味着它需要冒泡到使用位置。

class HttpModelsFactory {
    public static T Create<T>(Action<T> configure = null) 
        where T : IHttpModel, class, new() {

        T result = new T();
        
        if(configure != null) configure(result);

        return result;
    }
}

调用private static T PostNew<T>(Action<T> configure = null) where T : IHttpModel, class, new() { var model = HttpModelsFactory.Create<T>(configure); var request = new RestRequest("/households", Method.POST); request.AddParameter("application/json", model.ToJson(), ParameterType.RequestBody); //... return model; } 可能看起来像

PostNew