Я открыт для других контейнеров IoC, таких как NInject и StructureMap, если они намного чище, чем это. Я слышал, что StructureMap только что представил «контейнеры», которые могут это упростить, возможно?Есть ли лучший способ использовать API Замка Виндзора для Заводов?
Как говорится в названии, есть ли лучший способ? Это похоже на много кода, просто для регистрации объекта, который требует фабрики для его создания.
// The process to register an object, with a factory method
var cfg = new MutableConfiguration(p.Name);
cfg.Attributes["factoryId"] = p.TypeFactory.Name;
cfg.Attributes["factoryCreate"] = "Create";
var model = _container.Kernel.ComponentModelBuilder.BuildModel(
p.Name, p.TypeService, p.Type, null);
model.LifestyleType = LifestyleType.Pooled;
model.Configuration = cfg;
_container.Kernel.AddCustomComponent(model);
Versas "не-завод" способ добавления компонента:
// registering a component with no factory method
_container.AddComponentLifeStyle(
p.Name, p.TypeService, p.Type, LifestyleType.Singleton);
Первый кажется слишком сложным.
Заранее благодарен!
Вы рассматривали проверку документации перед публикацией этого вопроса? http://using.castleproject.org/display/IoC/Fluent+Registration+API#FluentRegistrationAPI-Usingadelegateascomponentfactory: –
plus также класс FactorySupportFacility имеет методы, помогающие этому, если вы не хотите свободного API. В основном вы выбрали наименее оптимальный способ сделать это. –
Привет, Krzysztof, и благодарю вас за комментарии. Забавно, я никогда не видел ссылки на документацию о замке - так как любые ссылки там идут на такие страницы: http://api.castleproject.org/ Прямо со своего сайта. Спасибо, что связали меня с фактической документацией (но, пожалуйста, будьте добры в своих комментариях в будущем). – eduncan911