2010-11-23 63 views
1

我正在使用ASP.NET MVCNinject,我试图创建一个ActionResult工厂。比方说,我有以下ActionResults如何创建一个返回具有不同参数的不同实例的工厂?

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? 
    } 
} 

我怎么会写这个工厂,以便它可以带参数,并将其传递给对象的构造?或者我应该做这样的代替:

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"; 

其中每个属性被公开曝光和我对象创建后,将它们分配?

+0

你的参数在哪里?你的意思是`T`? – 2010-11-23 03:41:32

回答

1

创建3创建方法为每个类型,传递所需的参数,并创建实例这样的。

public FailResult CreateFailResult(int failcode) 
{ 
    return _kernel.Get<FailResult>(new ConstructorArgument("failCode", failcode)); 
} 
0
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; 
    } 
} 
+0

哦,似乎我误解了OP的问题。哦,我可怜的英语! – 2010-11-23 03:58:53

+0

@Danny Chen中文? – 2010-11-23 05:24:08

1

您需要带参数的构造函数注入。

请参阅以下链接

Ninject with parameters

+0

Ninject 2似乎没有`With.Parameters`。 – 2010-11-23 05:13:44

相关问题