Могу ли я зарегистрировать свои типы в модулях в Unity, как в Autofac? - PullRequest
10 голосов
/ 07 августа 2010

Я довольно хорошо знаком с Autofac, и одна особенность, которая мне действительно нравится в Autofac, - это регистрация модулей.Кто-нибудь знает, как я могу сделать это с Unity?Мне трудно найти, какие термины использовать в Google, чтобы придумать единичный эквивалент, если он есть.

Ответы [ 2 ]

35 голосов
/ 20 августа 2010

На самом деле, вы можете сделать тривиально с расширениями контейнера Unity.

public class Global : HttpApplication, IContainerProviderAccessor
{
   private static IContainerProvider _containerProvider;

   protected void Application_Start(object sender, EventArgs e)
   {
      var container = new UnityContainer();
      container.AddNewExtension<MyWebModule>();

      _containerProvider = new ContainerProvider(container);
   }

[...]

   public IContainerProvider ContainerProvider
   {
      get { return _containerProvider; }
   }
}

public class MyWebModule : UnityContainerExtension
{
    protected override void Initialize()
    {
        Container.AddNewExtension<ApplicationModule>();
        Container.AddNewExtension<DomainModule>();
    }
}

public class ApplicationModule: UnityContainerExtension
{
    protected override void Initialize()
    {
        Container.RegisterType<ProductPrensenter>(
            new ContainerControlledLifetimeManager(),
            new InjectionFactory(c => new ProductPresenter(c.Resolve<IProductView>())));
    }
}
2 голосов
/ 09 августа 2010

Вы не можете.Просто используйте Autofac или Windsor.Вы найдете, что много отсутствует в Unity, и то, что там работает, неожиданным образом.Это просто не стоит вашего времени.

...