Я хочу знать, что лучше всего подходит для следующего случая:
Я разрабатываю приложение, которое необходимо использовать на трех разных размерах экрана: 240x320; 800х600; 1280x1024 (и только эти три) на разных языках (с использованием локализации).
Итак, я создал библиотеку по размеру экрана, каждый из которых реализует интерфейс, определенный в проекте, который вызывает эти экраны.
Первый вопрос: все мои файлы ресурсов дублируются, и это много файлов, которые необходимо обновлять (или с дублирующими метками). Есть ли простой способ изменить это?
Второй вопрос: я использую хороший подход или существует лучший способ сделать то, что я пытаюсь сделать? Может быть, применяя шаблон дизайна?
Пример кода
Код звонящего:
public int X { get { return 800; } }
public int Y { get { return 600; } }
public interface IScreenForm
{
Form FormComponent { get; }
}
public interface IFormA : IScreenForm
{
TextBox UserTextBox { get; } // For use
}
public void LoadForm<T>()
where T:IScreenForm
{
if (!typeof(T).IsInterface)
{
throw new ArgumentException(typeof(T).Name + " is not an interface");
}
Assembly screenAssembly;
string screenResolutionDll = string.Format("{0}_{1}_screens.dll", this.X, this.Y);
screenAssembly = Assembly.LoadFrom(screenResolutionDll);
Type formType = screenAssembly.GetTypes()
.FirstOrDefault(t => t.GetInterfaces().Where(i => i.Name == typeof(T).Name).Count() > 0);
if (formType != null)
{
Form form = (Form)formType.GetConstructor(new Type[] { }).Invoke(null);
if (form != null)
{
form.Show();
}
else
{
throw new ArgumentException("Form doesn't provide a new() ctor");
}
}
else
{
throw new ArgumentException("Any form doesn't implement the interface : " + typeof(T).Name);
}
}
DLL экрана:
public partial class MyFirstForm : Form, caller.IFormA
{
public Form1()
{
InitializeComponent();
}
/* caller.IFormA interface implementation */
}