gpt4 book ai didi

c# - .Net 反射 : How to invoke a constructor that takes a interface as parameter

转载 作者:太空狗 更新时间:2023-10-30 01:10:36 26 4
gpt4 key购买 nike

我想通过将接口(interface)作为参数的 .Net 反射调用构造函数。此类的代码如下所示:

public interface IStringGetter
{
string GetString( );
}

public class Class1
{
private IStringGetter _stringGetter;
public Class1( IStringGetter stringGetter )
{
_stringGetter = stringGetter;
}

public String GetString( )
{
return _stringGetter.GetString( );
}
}

通过反射使用此类的代码如下所示:

  Assembly asm = Assembly.LoadFrom( @"c:\temp\ClassLibrary1.dll" );
Type tClass1 = asm.GetType( "ClassLibrary1.Class1" );
Type tStringGetter = asm.GetType( "ClassLibrary1.IStringGetter" );

ConstructorInfo ci = tClass1.GetConstructor( new Type[ ] { tStringGetter } );
// object obj = ci.Invoke( new object[ ] { *what goes here?* } );

现在需要一个实现 IStringGetter 接口(interface)的对象。我无法通过反射获得对象,因为库中没有任何东西实现该接口(interface)。有没有办法创建一个实现接口(interface)的对象并将其传递给构造函数?

现在我正在使用带有 Visual Studio 2008 的 Windows 窗体,它是一个以 .Net2.0 框架为目标的 C# 项目。但我很乐意接受任何解决方案。

编辑:抱歉,我没有完整说明问题。这两个代码片段位于不同的程序集中。包含第二个代码片段的程序集没有对第一个 dll 的引用,它只是通过反射加载程序集。如果我只是写

public class MyStringGetter : IStringGetter

编译器抛出错误,因为 IStringGetter 在编译时未知。

Edit2:虽然这不是我所希望的,但我认为答案是:不要那样做

最佳答案

如果 Assembly 中没有实现此接口(interface)的类,则创建一个 mock 在单独的 Assembly 中实现该接口(interface)并使用它.

关于c# - .Net 反射 : How to invoke a constructor that takes a interface as parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4385793/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com