C# 如何创建返回具有不同参数的不同实例的工厂?

C# 如何创建返回具有不同参数的不同实例的工厂?,c#,asp.net-mvc,inversion-of-control,ninject,factory,C#,Asp.net Mvc,Inversion Of Control,Ninject,Factory,我正在使用ASP.NET MVC和Ninject并试图创建一个ActionResult工厂。假设我有以下操作结果: public class SuccessResult : ActionResult { public string SuccessMessage { get; set; } public SuccessResult(string successMessage) { ... } } public class FailResult : ActionResult {

我正在使用
ASP.NET MVC
Ninject
并试图创建一个
ActionResult
工厂。假设我有以下
操作结果

public class SuccessResult : ActionResult
{
    public string SuccessMessage { get; set; }

    public SuccessResult(string successMessage) { ... }
}

public class FailResult : ActionResult
{
    public int FailCode { get; set; }

    public FailResult(int failCode) { ... }
}

public class DataResult : ActionResult
{
    public object Data { get; set; }
    public string MimeType { get; set; }

    public DataResult(object dataToSerialize, string mimeType) { ... }
}
因此,对于每个
ActionResult
,参数类型和参数数量将不同。我创建了一个
ActionResultFactory
,如下所示:

public class ActionResultFactory
{
    private readonly IKernel _kernel;

    public ActionResultFactory(IKernel kernel)
    {
        _kernel = kernel;
    }

    public T Create<T>() where T : ActionResult
    {
        return _kernel.Get<T>(); // how do I pass the parameters?
    }
}
公共类ActionResultFactory
{
私有只读IKernel_内核;
公共操作结果工厂(IKernel内核)
{
_内核=内核;
}
public T Create(),其中T:ActionResult
{
return _kernel.Get();//如何传递参数?
}
}
我应该如何编写工厂,以便它能够获取参数并将它们传递给对象的构造函数?或者我应该这样做:

var result = factory.Create<SuccessResult>();
result.SuccessMessage = "Success!";

var result = factory.Create<FailResult>();
result.FailCode = 404;

var result = factory.Create<DataResult>();
result.Data = file;
result.MimeType = "text/plain";
var result=factory.Create();
result.successage=“Success!”;
var result=factory.Create();
result.FailCode=404;
var result=factory.Create();
结果.数据=文件;
result.MimeType=“text/plain”;
每个属性都是公开的,我在对象创建后分配它们?

public T Create(params object[]parameters)
public T Create<T>(params object[] parameters) 
{
    T instance = _kernel.Get<T>();
    if (typeof(T) == typeof(FailResult))
    {
        FailResult result = (FailResult)instance;
        result.ErrorCode = (int)parameters[0];
        return result;
    }
}
{ T instance=_kernel.Get(); if(类型(T)=类型(故障结果)) { FailResult=(FailResult)实例; result.ErrorCode=(int)参数[0]; 返回结果; } }
您需要一个带参数的构造函数注入

请看下面的链接


您可以创建一个小提供程序来新建并初始化ActionResult对象。解释如下:


请参见创建3个Create方法,每种类型一个,传递所需的参数,然后像这样创建实例

public FailResult CreateFailResult(int failcode)
{
    return _kernel.Get<FailResult>(new ConstructorArgument("failCode", failcode));
}
public FailResult CreateFailResult(int failcode)
{
返回_kernel.Get(新的构造函数参数(“failCode”,failCode));
}

您的参数在哪里?你是说
T
?哦,看来我误解了OP的问题。哦,我可怜的英语!Ninject 2似乎没有带.Parameters的
。不太喜欢这个解决方案,但我看不到任何其他方法。