我正在创建一个API,我希望公开一个名为IReportFields的接口,我希望客户端实现这个类,并且基本上从任何数据源(通常是数据库)获取字段。
在我的IReport界面中,我想要接收一个IReportFields的实例(可能不止一个,在我的应用程序中我至少有4个),然后在该界面中做我需要做的任何事情,通常它会是比如建立报告或其他什么。
例如:
public interface IReportField
{
ICollection<ReportField> GetFields();
}
可能存在各种类型的报告字段,例如他们可以派出3或4个不同的数据库表等...
然后在我的主界面上我会:
public interface IReport
{
string GetReport(IReportField[] field);
}
问题:
IReportFields 可以有多个实现,即许多不同类型的字段,我如何调用 GetReport 方法,记住我正在使用 Ninject ,如何将界面连接在一起?
//这一点是我陷入困境的地方,我如何传递参数,因为我不希望对需要我获取报告
的类强烈依赖 IFieldReport field1 = new FieldImp1();
IFieldReport field2 = new FieldImp2();
var report = GetReport(feild1, field2);
答案 0 :(得分:1)
您可以使用Constructor
注入使所有连接IFieldReports
,例如您的连线如下:
IKernel kernel = new StandardKernel();
kernel.Bind<IReportField>().To<FieldImp1>();
kernel.Bind<IReportField>().To<FieldImp2>();
kernel.Bind<IReport>().To<ReportImpl>();
你有ReportImpl
这样:
public class ReportImpl : IReport
{
public ReportImpl(List<IReportField> fieldReports)
{
// you now have all the wires to IReportField in fieldReports parameter
foreach(IReportField fieldReport in fieldReports)
{
var fields = fieldReport.GetFields();
// do whatever with the fields
}
}
}
如果我弄错了,请告诉我