[ Log On ]

Dependency Injection - Autofac

Posted by frennky on 5/21/2011 @ 1:31 PM in Web Development

Autofac je još jedan IoC kontejner za .Net, takođe vrlo popularan. Odlikuje ga manja veličina biblioteka u odnosu na ostale IoC kontejnere, ali ne i nedostatak funkcionalnosti.

Jednostavna implementacija IDependencyResolver interfejsa pomoću Autofac framework-a bi izgledala ovako:

public class AutofacDependencyResolver : IDependencyResolver
{
    private IContainer container;

    public AutofacDependencyResolver(Autofac.IContainer container)
    {
        this.container = container;
    }

    public object GetService(Type serviceType)
    {
        try
        {
            return this.container.Resolve(serviceType);
        }
        catch
        {
            return null;
        }
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        try
        {
            Type type = typeof(IEnumerable).MakeGenericType(
            new Type[]
            {
                serviceType
            });
            object obj = this.container.Resolve(type);
            return (IEnumerable<object>)obj;
        }
        catch
        {
            return new List<object>();
        }
    }
}

Setup Autofac IoC kontejnera treba staviti u Global.asax.cs fajl:

protected void Application_Start()
{
    RegisterAutofacDependencyResolver();
    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);
}

private void RegisterAutofacDependencyResolver()
{
    var builder = new ContainerBuilder();
    builder.RegisterType<HomeController>();
    builder.RegisterType<ConcreteRepository>().As<IRepository>();

    DependencyResolver.SetResolver(
    new AutofacDependencyResolver(builder.Build()));
}