10

I am fairly familiar with Autofac and one feature that I really love about Autofac is the registering of modules. Does anyone know how I can do this with Unity? I'm having a hard time finding which terms to use in Google to come up with the unity equivalent if there is one.

  public class Global : HttpApplication, IContainerProviderAccessor { private static IContainerProvider _containerProvider; protected void Application_Start(object sender, EventArgs e) { var builder = new ContainerBuilder(); builder.RegisterModule(new MyWebModule()); _containerProvider = new ContainerProvider(builder.Build()); } [...] public IContainerProvider ContainerProvider { get { return _containerProvider; } } } public class MyWebModule: Module { protected override void Load(ContainerBuilder builder) { builder.RegisterModule(new ApplicationModule()); builder.RegisterModule(new DomainModule()); } } public class ApplicationModule: Module { protected override void Load(ContainerBuilder builder) { builder.Register(c => new ProductPresenter(c.Resolve<IProductView>())) .As<ProductPresenter>() .ContainerScoped(); } }  

2 Answers 2

36

Actually, you can do trivially with Unity container extensions.

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>()))); } } 
Sign up to request clarification or add additional context in comments.

Comments

3

You can't. Just use Autofac or Windsor. You will find there's a lot missing in Unity and what's there works in unexpected ways. It's just not worth your time.

1 Comment

What specifically is missing in Unity? What does it do that is unexpected?

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.