StructureMap error: there is no default value for the PluginFamily module

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.

+6
source share
1 answer

Take out the StructureMapControllerActivator , I don't think you need it. If you save it, you need to add a mapping for the AccountController .

Also, use Controller Injection instead, this will simplify unit testing:

 public class AccountController : Controller { private readonly IUserRepo _userRepo; public AccountController(IUserRepo userRepo) { _userRepo = userRepo; } public ActionResult Login() { return View(); } } 

In addition, for your container, you can display mappings by default. This will automatically map the IService to Service :

 IContainer container = new Container( x => { x.Scan(scan => { scan.Assembly("MBP_Blog"); scan.Assembly("MBP_Blog.Data"); scan.WithDefaultConventions(); }); }); 
+3
source

Source: https://habr.com/ru/post/898374/


All Articles