【发布时间】:2010-12-08 09:14:42
【问题描述】:
我想通过将接口作为参数的 .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 接口的对象。我无法通过反射获得对象,因为库中没有实现该接口。有什么方法可以创建一个实现接口的对象并将其传递给构造函数?
现在我在 Visual Studio 2008 中使用 Windows 窗体,它是一个针对 .Net2.0 框架的 C# 项目。但我很乐意接受任何解决方案。
编辑:抱歉,我没有完整说明问题。这两个代码 sn-ps 在不同的程序集中。包含第二个代码 sn-p 的程序集没有对第一个 dll 的引用,它只是通过反射加载程序集。如果我只是写
public class MyStringGetter : IStringGetter
编译器抛出错误,因为在编译时 IStringGetter 未知。
Edit2:虽然这不是我所希望的,但我认为答案是:不要那样做
【问题讨论】:
标签: c# .net reflection