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的。不太喜欢这个解决方案,但我看不到任何其他方法。