C# 工厂法在哪里?

C# 工厂法在哪里?,c#,factory,C#,Factory,我正在实施factory模式,以支持使用两个不同的报告库(Crystal Reports和DevXpress)生成报告 因此,我创建了一个Default类库项目,并向其添加了一个IReport接口。然后,我又创建了两个类库项目,每个项目都有一个实现I报告的类。 此外,在我的Default项目中,我还添加了一个“Factory”类: 我的主应用程序只引用了Default项目。我的问题是: 我在哪里需要factory类,这样我就可以创建具体的类,而无需向我的主项目添加不必要的引用?在默认项目中显然不

我正在实施factory模式,以支持使用两个不同的报告库(Crystal Reports和DevXpress)生成报告

因此,我创建了一个
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));
        }
    }
}