在将StructureMap.MVC5集成到 ASP.Net MVC5 Web 应用程序时,意识到它使用的是 3.1 版本的 SM 而不是 4+。然后尝试获取此 Nuget 中包含的文件并将其更改为 SM4,但那里有很多代码,并且 SM3.1 和 SM4 之间有几个不兼容的调用。
有了这个,我最终编写了一个简单的 IoC,如下所示。寻找有关其不足之处以及与此处链接的 Nuget 版本相比效率低下的建议。
定义默认注册表
public class DefaultRegistry : Registry
{
public DefaultRegistry() {
Scan(
scan => {
scan.Assembly("MyAssembly");
scan.WithDefaultConventions();
});
For<IContext<SomeClass>>().Use<MyContext>();
}
}
创建静态容器
public static class IoC {
private static IContainer container = new Container(c => c.AddRegistry<DefaultRegistry>());
public static IContainer Container { get { return container; } }
}
覆盖控制器工厂
public class StructureMapControllerFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
return (IController)IoC.Container.GetInstance(controllerType);
}
}
在 Global.asax 中注册
protected void Application_Start()
{
ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory());
}
这可行,但担心会过度简化它,这可能会引入其他问题。寻找有关这种方法的问题的见解。