我一直在尝试学习依赖注入,但是在运行代码时遇到两个错误:


DependencyInjection.Message.Sms()必须声明一个主体,因为它没有被标记为抽象,外部或局部。
无法将类型DependencyInjection.IInterface隐式转换为DependencyInjection.MyClass。存在显式转换(您是否缺少演员表?)


下面的代码是否是DI的良好设计?

namespace DependencyInjection
{
    public interface IInterface
    {

    }

    public abstract class Message
    {
        public virtual void Sms();
    }

    public class MyClass : Message, IInterface
    {
        public override void Sms()
        {
            Console.WriteLine("Sms gönder.");
        }
    }

    public class ClassManager
    {
        private IInterface _myinterface;


        public MyClass Xyz
        {
            get { return _myinterface; }
            set { _myinterface = value; }
        }

        public ClassManager(IInterface myinterface)
        {
            _myinterface = myinterface;
        }
    }
}

最佳答案

1)DependencyInjection.Message.Sms()'必须声明一个主体,因为它没有被标记为抽象,外部或部分


abstract关键字(并删除虚拟的)添加到方法声明中:

public abstract void Sms();



  2)无法将类型'DependencyInjection.IInterface'隐式转换为'DependencyInjection.MyClass'。存在显式转换(您是否缺少演员表?)


private IInterface _myinterface;
public MyClass Xyz
{
    get { return _myinterface; }
    set { _myinterface = value; }
}


Xyz具有类型为MyClass的返回类型,但是在get中您将返回类型为_myinterfaceIInterface

更改为以下内容:

public IInterface Xyz
{
    get { return _myinterface; }
    set { _myinterface = value; }
}

09-28 09:48