.net 我如何通知接口的实现者;路径“;参数表示文件夹?

.net 我如何通知接口的实现者;路径“;参数表示文件夹?,.net,api,extensibility,.net,Api,Extensibility,我将在我的应用程序中定义一个接口,插件编写器可以实现该接口以提供用户定义的“导出”功能。它看起来像这样: public interface IFooExporter { void ExportFoo(Foo foo, string path); } 但是,我需要让插件编写者知道(明确地,而不仅仅是在文档中)路径代表一个文件夹,而不是一个文件名。他们的责任是在导出过程中创建文件 强制路径是文件夹而不是文件名的最佳方式是什么?我现在最好的猜测是使用DirectoryInfo而不是字符串:

我将在我的应用程序中定义一个接口,插件编写器可以实现该接口以提供用户定义的“导出”功能。它看起来像这样:

public interface IFooExporter
{
    void ExportFoo(Foo foo, string path);
}
但是,我需要让插件编写者知道(明确地,而不仅仅是在文档中)路径代表一个文件夹,而不是一个文件名。他们的责任是在导出过程中创建文件

强制路径是文件夹而不是文件名的最佳方式是什么?我现在最好的猜测是使用DirectoryInfo而不是字符串:

public interface IFooExporter
{
    void ExportFoo(Foo foo, DirectoryInfo folder);
}

这是一个好的解决方案,还是在传递DirectoryInfo实例时存在我不知道的缺陷?

使用XML注释,它们将显示在Visual Studio的Intellisense弹出窗口中

/// <summary>
/// Type in the text you want to appear
/// </summary>
//
///键入要显示的文本
/// 

使用XML注释,它们将显示在Visual Studio的Intellisense弹出窗口中

/// <summary>
/// Type in the text you want to appear
/// </summary>
//
///键入要显示的文本
/// 


更明确地命名变量。这仅仅是一条路吗?你说不,不是,但你还是用一个通用的名字。将其命名为folderPath,将减少混淆,也不需要将其显式地传达给实现者。

更明确地命名变量。这仅仅是一条路吗?你说不,不是,但你还是用一个通用的名字。将其命名为folderPath,将减少混淆,也无需将其明确传达给实现者。

因为您没有实现该解决方案,所以我同意您使用DirectoryInfo作为参数的解决方案。如果指定一个字符串,则无法停止任何字符串的传递。

因为您没有实现该解决方案,所以我同意您使用DirectoryInfo作为参数的解决方案。如果指定一个字符串,则无法阻止任何字符串的传递。

不过,正如我在问题中所说,我希望这在接口中是明确的,而不仅仅是一个文档。intellisense中的注释来自具体实现,而不是接口。不过,正如我在问题中所说,我希望这在接口中是明确的,而不仅仅是文档。intellisense中的注释来自具体的实现,而不是接口。是的,参数命名是答案的一部分(因此我在DirectoryInfo答案中将其重命名为“文件夹”),但我并没有低估潜在插件编写者的愚蠢!字符串是字符串,可以是任何东西,不管参数名如何。我不明白为什么需要“强制”任何东西。这些实现者正在实现某些东西的接收端,不是吗?您的代码不是发送此参数中的值的代码吗?如果不是,那么你的问题对我来说不是很清楚。是的,我的代码将提供参数。我试图让它在“强类型”的意义上万无一失。如果我传递一个字符串,而imlpementor决定将其视为文件名,那么他的导出程序将崩溃并烧掉。我知道这是他的错,但我想预先帮助防止这种情况发生。是的,参数命名是答案的一部分(因此我在DirectoryInfo答案中将其重命名为“文件夹”),但我并没有低估潜在插件编写者的愚蠢性!字符串是字符串,可以是任何东西,不管参数名如何。我不明白为什么需要“强制”任何东西。这些实现者正在实现某些东西的接收端,不是吗?您的代码不是发送此参数中的值的代码吗?如果不是,那么你的问题对我来说不是很清楚。是的,我的代码将提供参数。我试图让它在“强类型”的意义上万无一失。如果我传递一个字符串,而imlpementor决定将其视为文件名,那么他的导出程序将崩溃并烧掉。我知道这是他的错,但我想在前面帮助防止这种情况。积极强化!我会把这个问题留一段时间,如果没有人提出更好的解决方案或令人信服的反对DirectoryInfo的论据,那么我会把这个作为答案,并同意这个想法。如果你选择DirectoryInfo路线,请务必记住,您正在传递一个具有可变属性的对象。在这种情况下,一个新类继承自DirectoryInfo,使其成为只读也是可能的。我的意思是“记住”,即当您将字符串发送到某个方法时,不会对您进行更改。把DirectoryInfo对象交给插件后,不要依赖它的属性。是的,这是一个很好的观点。因为这是为自定义导出程序设计的,所以我很可能会构造一个DirectoryInfo并将其传入,然后再也不会查看它,所以易变性不应该是一个问题。积极强化!我会把这个问题留一段时间,如果没有人提出更好的解决方案或令人信服的反对DirectoryInfo的论据,那么我会把这个作为答案,并同意这个想法。如果你选择DirectoryInfo路线,请务必记住,您正在传递一个具有可变属性的对象。在这种情况下,一个新类继承自DirectoryInfo,使其成为只读也是可能的。我的意思是“记住”,即当您将字符串发送到某个方法时,不会对您进行更改。把DirectoryInfo对象交给插件后,不要依赖它的属性。是的,这是一个很好的观点。因为这将适用于自定义导出程序,所以我很可能会构造一个DirectoryInfo并将其传入,然后再也不查看它,所以可变性不应该是一个问题。Timothy,您可以强制他们使用DirectoryInfo,这不是一件坏事,或者如果您使用字符串,并且他们以其他方式传递文件名,则抛出ArgumentException。我将向他们传递字符串(这是为插件作者准备的)。我想确保他们实现该方法的方式不会假设字符串代表fil