我正在使用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
中调用此方法,但取决于ProjectPC
和ProjectAndroid
,它将不相同。
答案 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();
在你的核心项目中