我有一个以下问题要优雅解决:

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,则这两个示例都会崩溃,您需要进行一些检查,或者更好的方法是在构造函数中进行初始化。

我是否正确理解了这个问题?

09-27 00:23