very new to Structure-Map. trying to figure out how it works and how I can benefit from it.
I have it so far.
Global.asax.cs:
IContainer container = new Container(x => { x.For<IControllerActivator>().Use <StructureMapControllerActivator>(); x.For<IUserRepo>().Use<UserRepo>(); }); DependencyResolver.SetResolver(new StructureMapDependencyResolver(container));
StructureMapControllerActivator:
public class StructureMapControllerActivator : IControllerActivator { private readonly IContainer _container; public StructureMapControllerActivator(IContainer container ) { this._container = container; } public IController Create(RequestContext requestContext, Type controllerType) { return _container.GetInstance(controllerType) as IController; } }
StructreMapDependencyResolver:
private readonly IContainer _container; public StructureMapDependencyResolver(IContainer container ) { this._container = container; } public object GetService(Type serviceType) { object instance = _container.TryGetInstance(serviceType); if(instance == null && !serviceType.IsAbstract) { _container.Configure(c => c.AddType(serviceType,serviceType)); instance = _container.TryGetInstance(serviceType); } return instance; } public IEnumerable<object> GetServices(Type serviceType) { return _container.GetAllInstances(serviceType).Cast<object>(); } }
My account:
public class AccountController : Controller { private readonly IUserRepo _userRepo; private AccountController() { _userRepo = ObjectFactory.GetInstance<IUserRepo>(); } public ActionResult Login() { return View(); } }
Error code and description:
StructureMap exception code: 202 No default instance defined for PluginFamily MBP_Blog.Controllers.AccountController MBP blog, version = 1.0.0.0, Culture = neutral, PublicKeyToken = null
I have an interface name: IUserRepo and a repository name: UserRepo
please help when i try google but can't find any solution on the first 3 pages.
New bug after using @Martin code:
StructureMap exception code: 180 StructureMap cannot create objects of class MBP_Blog.Controllers.AccountController, MBP-Blog, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null because no public constructor was found.