Это упрощенная версия проблемы, которую я решаю, но концептуально эквивалентна. Этот проект использует виндзорский замок, и я стараюсь держать все заводы в контейнере.Завод для возврата массива IItem из одного объекта
У меня есть единственный объект, представляющий данные, проанализированные из текстового файла. После разбора этого файла мне нужно написать новый текстовый файл с 2 строками на основе данных в исходном объекте.
позволяет сказать текстовый файл Некоторые Person, Рабочий телефон, Мобильный телефон
это получает разобран в
public class Person
{
public string Name{get;set;}
public stirng WorkPhone {get;set;}
public stirng MobilPhone {get;set;}
}
Теперь это упрощенный пример, так что имейте это в виду, пожалуйста. Следующий шаг создающего новых экземпляров объектов, представляющие каждую строку мы будем записывать в текстовый файл
public interface IFileEntry
{
string Name{get;set;}
string Number{get;set;}
}
public class PersonWorkPhoneEntry : IFileEntry
{
public string Name {get;set;}
public string Number{get;set;}
public override ToString(){....}
}
public class PersonMobilPhoneEntry: IFileEntry
{
public string Name{get;set;}
public string Number{get;set;}
public override ToString(){....}
}
так в том, что мы используем замок для этого позволяет сделать фабрику
public interface IFileEntryFactory
{
IFileEntry Create(string entryType, stirng Name, string Number
}
Я Создал моя собственная реализация для DefaultTypedFactoryComponentSelector и установите ее только для этой фабрики.
public class FileEntryComponentSelector : DefaultTypedFactoryComponentSelector
{
protected override string GetComponentName(System.Reflection.MethodInfo method, object[] arguments)
{
if (method.Name == "Create" && arguments.length == 3)
{
return (string)arguments[0];
}
return base.GetComponentName(method, arguments);
}
}
Это работает,
var workEntry = _factory.Create("PersonWorkPhoneEntry", person.Name, person.WorkPhone)
var mobilEntry = _factory.Create("PersonMobilPhoneEntry", person.Name, person.WorkPhone)
//then write the tostring to a text file
Извините за длинный установки, но я думаю, что его нужно. То, что я пытаюсь сделать, это
public interface IFileEntryFactory
{
IFileEntry Create(string entryType, stirng Name, string Number
IFileEntry[] Create(Person person)
}
var entries = _factory.Create(person);
foreach(var e in entries)
///write to text file.
Я искал все решения, подобные этому, без каких-либо результатов. Возможно, что это возможное решение, приведенное здесь (Castle Windsor Typed Factory Facility with generics) В настоящее время я работаю над реализацией чего-то подобного, не уверен, что это правильный способ решить эту проблему.
Вопросов:
- являются ли какими-либо другими способами, чтобы иметь завод вернуть массив необходимых объектов
- , что является оптимальным для решения что-то вроде это
- любых примеров и чтения для передовых заводов
спасибо, что нашли время, чтобы написать ответ. очень подробный и полезный. – workabyte