У меня есть командный класс, который должен иметь 2 конструктора. Тем не мение,
используя Structuremap кажется, что я могу указать только один конструктор
использоваться. Я решил проблему на данный момент, подтип конкретных
командный класс, который каждая реализация реализует самостоятельно
интерфейс и конструктор. Как показывает код ниже.
ISelectCommand реализует два отдельных интерфейса для
строковый конструктор и конструктор int, просто ради
регистрация двух подтипов с использованием структуры карты.
Тем не менее, я считаю это взломом, и мне просто интересно, почему это не так
возможно для Structuremap разрешить сигнатуру конструктора
тип передается в качестве параметра для конструктора? Тогда я мог бы зарегистрироваться
SelectProductCommand в качестве ISelectCommand и
создать его как:
ObjectFactury.With (10) .Использование> ();
. OrObjectFactury.With ( "testproduct") Используйте> ();
public class SelectProductCommand : ISelectCommand<IProduct>,
ICommand, IExecutable
{
private readonly Func<Product, Boolean> _selector;
private IEnumerable<IProduct> _resultList;
public SelectProductCommand(Func<Product, Boolean> selector)
{
_selector = selector;
}
public IEnumerable<IProduct> Result
{
get { return _resultList; }
}
public void Execute(GenFormDataContext context)
{
_resultList = GetProductRepository().Fetch(context,
_selector);
}
private Repository<IProduct, Product> GetProductRepository()
{
return ObjectFactory.GetInstance<Repository<IProduct,
Product>>();
}
}
public class SelectProductIntCommand: SelectProductCommand
{
public SelectProductIntCommand(Int32 id): base(x =>
x.ProductId == id) {}
}
public class SelectProductStringCommand: SelectProductCommand
{
public SelectProductStringCommand(String name): base(x =>
x.ProductName.Contains(name)) {}
}
P.s. Я знаю, как указать structmap, какую карту конструктора использовать, но опять же мой вопрос: есть ли способ заставить structmap выбрать правильный конструктор на основе параметра, переданного в конструктор (т. Е. С использованием обычной перегрузки метода).