======================= Running Code at Startup ======================= Autofac provides the ability for components to be notified or automatically activated when the container is built. There are two automatic activation mechanisms available: - Startable components - Auto-activated components In both cases, **at the time the container is built, the component will be activated**. Startable Components ==================== A **startable component** is one that is activated by the container when the container is initially built and has a specific method called to bootstrap an action on the component. The key is to implement the ``Autofac.IStartable`` interface. When the container is built, the component will be activated and the ``IStartable.Start()`` method will be called. **This only happens once, for a single instance of each component, the first time the container is built.** Resolving startable components by hand won't result in their ``Start()`` method being called. It isn't recommended that startable components implement other services, or be registered as anything other than ``SingleInstance()``. Components that need to have something like a ``Start()`` method called *each time they are activated* should use :doc:`a lifetime event <events>` like ``OnActivated`` instead. To create a startable component, implement ``Autofac.IStartable``: .. sourcecode:: csharp public class StartupMessageWriter : IStartable { public void Start() { Console.WriteLine("App is starting up!"); } } Then register your component and **be sure to specify** it as ``IStartable`` or the action won't be called: .. sourcecode:: csharp var builder = new ContainerBuilder(); builder .RegisterType<StartupMessageWriter>() .As<IStartable>() .SingleInstance(); When the container is built, the type will be activated and the ``IStartable.Start()`` method will be called. In this example, a message will be written to the console. Auto-Activated Components ========================= An **auto-activated component** is a component that simply needs to be activated one time when the container is built. This is a "warm start" style of behavior where no method on the component is called and no interface needs to be implemented - a single instance of the component will be resolved with no reference to the instance held. To register an auto-activated component, use the ``AutoActivate()`` registration extension. .. sourcecode:: csharp var builder = new ContainerBuilder(); builder .RegisterType<TypeRequiringWarmStart>() .AutoActivate();