C# 工厂法在哪里?
我正在实施factory模式,以支持使用两个不同的报告库(Crystal Reports和DevXpress)生成报告 因此,我创建了一个C# 工厂法在哪里?,c#,factory,C#,Factory,我正在实施factory模式,以支持使用两个不同的报告库(Crystal Reports和DevXpress)生成报告 因此,我创建了一个Default类库项目,并向其添加了一个IReport接口。然后,我又创建了两个类库项目,每个项目都有一个实现I报告的类。 此外,在我的Default项目中,我还添加了一个“Factory”类: 我的主应用程序只引用了Default项目。我的问题是: 我在哪里需要factory类,这样我就可以创建具体的类,而无需向我的主项目添加不必要的引用?在默认项目中显然不
Default
类库项目,并向其添加了一个IReport
接口。然后,我又创建了两个类库项目,每个项目都有一个实现I报告的类。
此外,在我的Default
项目中,我还添加了一个“Factory”类:
我的主应用程序只引用了Default
项目。我的问题是:
我在哪里需要factory类,这样我就可以创建具体的类,而无需向我的主项目添加不必要的引用?在默认项目中显然不能这样做,因为这会导致循环依赖。通常情况下,您会有另一个项目,它引用了您在那里的所有3个项目,并且被您的应用程序项目引用,但是请注意,主项目仍然会对所有3个项目具有可传递的依赖关系,因为.NET在主项目中的工作方式就是这样,您所需要的只是:
IReport
。所以您只需要引用默认值
。当然,您将需要其他程序集,但不需要对它们的引用。如果出于某种原因这不起作用,请告诉我。显然,在默认项目中不能这样做,因为这会导致循环依赖。通常情况下,您会有另一个项目,它引用了您在那里的所有3个项目,并且被您的应用程序项目引用,但是请注意,主项目仍然会对所有3个项目具有可传递的依赖关系,因为.NET在主项目中的工作方式就是这样,您所需要的只是:IReport
。所以您只需要引用默认值
。当然,您将需要其他程序集,但不需要对它们的引用。如果出于某种原因,这不起作用,请告诉我。
public sealed class ReportFactory : IReportFactory
{
public IReport Get(string extension)
{
switch (extension.ToLower())
{
case "rpt":
//TODO create crystal report instance
break;
case "rpx":
//TODO create devexpress report instance
break;
default:
throw new ArgumentNullException(nameof(extension));
}
}
}