MVC 3 beta + Dependency Resolver + Unity = got a problem

I try to use Dependency Resolver with Unity and get some problems while creating my controller. Here is an example controller:

public class AccountController : Controller
{
    private readonly ICourseService _courseService;

    public AccountController(ICourseService courseService)
    {
         _courseService = courseService;
    }
}

But, when the controller tries to create - I have an exception "Without a constructor without parameters defined for this object." I am even trying to add a default constructor for this controller, but courseService did not create. Also try adding a property with the [Dependency] attribute - nothing happened. Here is the Resendver Dependency class:

public class UnityDependencyResolver : IDependencyResolver
{
    private readonly IUnityContainer _container;
    public UnityDependencyResolver(IUnityContainer container)
    {
        _container = container;
    }

    public object GetService(Type serviceType)
    {
        return _container.IsRegistered(serviceType) ? _container.Resolve(serviceType) : null;
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        return _container.IsRegistered(serviceType) ? _container.ResolveAll(serviceType) : new List<object>();
    }
}

and Global.asax.cs:

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);

        var container = new UnityContainer();
        container.RegisterType<ICourseService, CourseService>();

        DependencyResolver.SetResolver(new UnityDependencyResolver(container));
    }

Can anybody help me?

+5
source share
4 answers

, . , factory. , - . . IService , IService IRepository , IRepository, .

+5

IDependencyResolver AccountController. , null, MVC , ctor.

+2

, , . GetService() :

 public object GetService(Type serviceType){
    if (!container.IsRegistered(serviceType)){
      if (serviceType.IsAbstract || serviceType.IsInterface){
        return null;
      }
    }
    return container.Resolve(serviceType);
  }

, , , CourseService CourseRepository, .

DanH , - , instatiated.

, :

http://xhalent.wordpress.com/2011/01/17/using-unity-as-a-dependency-resolver-asp-net-mvc-3/

+1

, MVC factory, Unity ICourseService.

You need to create a custom factory controller in order to use Unity (in particular, the one that overrides it GetControllerInstance(Type type)), for this there should be enough documentation and samples, this is a simple class, and then register it in the Application_Startfollowing way:

ControllerBuilder.Current.SetControllerFactory (new MyUnityControllerFactory(container));
0
source

All Articles