Есть ли лучший способ использовать API Castle Windsor для фабрик? - PullRequest
1 голос
/ 03 марта 2010

Я открыт для других контейнеров IoC, таких как NInject и StructureMap, если они намного чище, чем этот. Я слышал, что StructureMap только что представил "контейнеры", которые могут упростить это, возможно?

Как видно из названия, есть ли лучший способ? Это похоже на большой код, просто для регистрации объекта, для создания которого требуется фабрика.

// 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);

Вариант «не заводского» способа добавления компонента:

// registering a component with no factory method
_container.AddComponentLifeStyle(
    p.Name, p.TypeService, p.Type, LifestyleType.Singleton);

Первое кажется слишком сложным.

Заранее спасибо!

1 Ответ

3 голосов
/ 03 марта 2010

Я не уверен, что вы пытаетесь зарегистрировать (что такое p в первом блоке кода?), Но с UsingFactoryMethod регистрация фабрики проходит очень быстро.Пример кода:

container.AddFacility<FactorySupportFacility>()
   .Register(
      Component.For<IMyService>()
         .UsingFactoryMethod(() => MyLegacyServiceFactory.CreateMyService())
         .LifeStyle.Pooled
   );
...