我有一个以下问题要优雅解决:
public interface IMyclass
{
}
public class A
{
public void Init(IMyclass class){?}
public IMyclass CreateMyClass(){?}
}
在系统启动时,我想使用Init()定义IMyClass的动态类型,并且在系统运行期间,我想创建我在init定义的类型的新实例。
笔记:
1. IMyclass必须是接口
2.仅在初始化时知道的IMyclass的动态类型(我在:)之后没有构造函数)
3.我可以使用IMyclass的反射或定义方法克隆来做到这一点,还有更好的解决方案吗?
谢谢。
最佳答案
您可以将提供者传递给class A
public class A
{
IMyClassProvider _provider;
public void Init(IMyClassProvider provider)
{
_provider = provider;
}
public IMyclass CreateMyClass()
{
return _provider.Create();
}
}
或者也许有一个构造函数委托
public class A
{
Func<IMyclass> _ctor;
public void Init(Func<IMyclass> ctor)
{
_ctor = ctor;
}
public IMyclass CreateMyClass()
{
return _ctor();
}
}
请注意,如果未在
Init
之前调用CreateMyClass
,则这两个示例都会崩溃,您需要进行一些检查,或者更好的方法是在构造函数中进行初始化。我是否正确理解了这个问题?