gpt4 book ai didi

c# - 为什么 structuremap 没有选择我的 HomeController?

转载 作者:行者123 更新时间:2023-11-30 17:16:13 25 4
gpt4 key购买 nike

这是 asp.net mvc3。

当我尝试转到主页/索引操作时:

    public class HomeController : Controller
{
private IBar bar;

public HomeController(IBar bar)
{
this.bar = bar;
}

//
// GET: /Home/

public ActionResult Index()
{
ViewBag.Message = "hello world yo: " + bar.SayHi();

return View();
}

}

public interface IBar
{
string SayHi();
}

public class Bar : IBar
{
public string SayHi()
{
return "Hello from BarImpl!";
}
}

我得到错误:

System.NullReferenceException: Object reference not set to an instance of an object.
public IController Create(RequestContext requestContext, Type controllerType)
Line 98: {
Line 99: return container.GetInstance(controllerType) as IController;
Line 100:
Line 101: }

我是否必须以某种方式手动连接每个 Controller 类?

我的 global.asax.cs 有:

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

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

IContainer container = new Container(
x =>
{
x.Scan(s =>
{
s.AssembliesFromApplicationBaseDirectory();
s.WithDefaultConventions();
s.LookForRegistries();
}
);
x.For<IControllerActivator>().Use<StructureMapControllerActivator>();
x.For<IBar>().Use<Bar>();
}
);


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

还有我的结构化 map 相关类:

public class StructuredMapDependencyResolver : IDependencyResolver
{
private IContainer container;
public StructuredMapDependencyResolver(IContainer container)
{
this.container = container;
}

public object GetService(Type serviceType)
{
if (serviceType.IsAbstract || serviceType.IsInterface)
{
return container.TryGetInstance(serviceType);
}
return container.GetInstance(serviceType);
}

public IEnumerable<object> GetServices(Type servicesType)
{
//return container.GetAllInstances(servicesType) as IEnumerable<object>;
return container.GetAllInstances<object>()

.Where(s => s.GetType() == servicesType);
}

}

public class StructureMapControllerActivator : IControllerActivator
{
private IContainer container;
public StructureMapControllerActivator(IContainer container)
{
container = container;
}


public IController Create(RequestContext requestContext, Type controllerType)
{
return container.GetInstance(controllerType) as IController;

}
}

最佳答案

您检查过是哪个对象给了您 NullReferenceException 吗?

看起来你在这里将 container 分配给它自己:

private IContainer container;
public StructureMapControllerActivator(IContainer container)
{
container = container;
}

所以永远不会设置成员变量。将构造函数中的行更改为 this.container = container 就可以了。

关于c# - 为什么 structuremap 没有选择我的 HomeController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7396355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com