更改其他项目中的方法

时间:2016-11-28 10:04:53

标签: c#

我正在使用C#应用程序。

我有一个用于生成矩阵的库。对于调试,我创建了一个方法WriteToFile。但是这个库用于PC上的应用程序和android上的另一个应用程序(可能是以后的iOS)。所以我不想在这个库中使用IO。

有我的解决方案:

  • ProjectLibrary
  • ProjectPC
  • ProjectAndroid

实际上,ProjectLibrary中有一个矩阵

的类
namespace ProjectLibrary
{
    public class Matrix
    {
        public void Generate()
        {
            //Generate Step 1

            //for the debug I want to use this method sometime
            WriteToFile();

            //Generate Step 2
        }

        public void WriteToFile()
        {
            //TODO
            //if ProjectPC write on PC
            //if ProjectAndroid write on phone
        }
    }
}

我的问题是:如何创建方法WriteToFile?必须在我的项目ProjectLibrary中调用此方法,但取决于ProjectPCProjectAndroid,它将不相同。

1 个答案:

答案 0 :(得分:4)

使用接口和依赖注入!

在项目库中创建界面:

public interface IFileWriter
{
    void WriteToFile();
}

然后修改Matrix类以添加依赖项:

public class Matrix
    {
        private IFileWriter _writer;

        public Matrix(IFileWriter writer)
        {
             _writer = writer;
        }

        public void Generate()
        {
            //Generate Step 1

            //for the debug I want to use this method sometime
            _writer.WriteToFile();

            //Generate Step 2
        }


    }

在Windows项目中,然后创建一个继承自IFileWriter的类:

public class WindowsFileWriter : IFileWriter
{
    public void WriteToFile()
    {
        //Your windows code
    }
}

然后在Android项目中执行相同的操作:

public class AndroidFileWriter : IFileWriter
{
    public void WriteToFile()
    {
        //Your android  code
    }
}

然后当你在Android中需要你的矩阵类时,你只需要这样称呼它:

AndroidFileWriter myAndroidFileWriter = new AndroidFileWriter();
Matrix myMatrix = new Matrix(myAndroidFileWriter );
myMatrix.Generate();

在Windows中:

WindowsFileWriter myWindowsFileWriter = new WindowsFileWriter();
Matrix myMatrix = new Matrix(myWindowsFileWriter );
myMatrix.Generate();

更好(从我的角度来看)如果你使用一些Mvvm框架,你可以在IOC中注册你的IFileWriter实现!

例如,使用MvvmCross,这会给你:

Mvx.Register<IFileWriter, AndroidFileWriter>(); //in your android project start

Mvx.Register<IFileWriter, WindowsFileWriter>(); //in your windows project start

然后致电:

Mvx.Resolve<IFileWriter>().Generate();

在你的核心项目中