Asp.net mvc 4 带StructureMap的asp.net MVC 4

Asp.net mvc 4 带StructureMap的asp.net MVC 4,asp.net-mvc-4,structuremap,webactivator,Asp.net Mvc 4,Structuremap,Webactivator,我正在将ASP.NET MVC3项目转换为MVC4。我试图找到使用StructureMap和MVC4的最佳方法。我已经找到了一些可能有效的解决方案,但还没有尝试过 第一个解决方案非常简单和简单。第二个()依赖于WebActivator进行启动 更好、最简单的方法是什么?我仍然需要引导所有内容并使用WebActivator设置DependencyResolver吗 谢谢你的帮助。我做了以下工作,效果很好。希望能有帮助 public class StructureMapDependencyResol

我正在将ASP.NET MVC3项目转换为MVC4。我试图找到使用StructureMap和MVC4的最佳方法。我已经找到了一些可能有效的解决方案,但还没有尝试过

第一个解决方案非常简单和简单。第二个()依赖于WebActivator进行启动

更好、最简单的方法是什么?我仍然需要引导所有内容并使用WebActivator设置DependencyResolver吗


谢谢你的帮助。

我做了以下工作,效果很好。希望能有帮助

public class StructureMapDependencyResolver : IDependencyResolver
    {
        private readonly IContainer _container;

        public StructureMapDependencyResolver(IContainer container)
        {
            _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 serviceType)
        {
            return _container.GetAllInstances<object>().Where(s => s.GetType() == serviceType);
        }

    }
公共类结构MapDependencyResolver:IDependencyResolver
{
专用只读IContainer\u容器;
公共结构MapDependencyResolver(IContainer容器)
{
_容器=容器;
}
公共对象GetService(类型serviceType)
{
if(serviceType.IsAbstract | | serviceType.IsInterface)
{
返回_container.TryGetInstance(服务类型);
}
return\u container.GetInstance(serviceType);
}
公共IEnumerable GetServices(类型serviceType)
{
返回_container.GetAllInstances(),其中(s=>s.GetType()==serviceType);
}
}
Global.asax:

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

        var container = ConfigureDependencies();

        GlobalConfiguration.Configuration.ServiceResolver.SetResolver(new StructureMapDependencyResolver(container));

        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes); 
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }

    public static IContainer ConfigureDependencies()
    { 
        IContainer container = new Container();

        Database.SetInitializer(new DataContextInitializer());
        var dataContext = new DataContext.DataContext();

        container.Configure(x => x.For<IRepository>().Use<Repository>().Ctor<DbContext>().Is(dataContext)); 
        container.Configure(x=>x.For<IUnitOfWork>().Use<UnitOfWork>());

        return container;
    }
受保护的无效应用程序\u Start()
{
RegisterAllAreas();
var container=ConfigureDependencies();
GlobalConfiguration.Configuration.ServiceResolver.SetResolver(新结构MapDependencyResolver(容器));
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
公共静态IContainer配置依赖项()
{ 
IContainer容器=新容器();
SetInitializer(新的DataContextInitializer());
var dataContext=new dataContext.dataContext();
Configure(x=>x.For().Use().Ctor().Is(dataContext));
Configure(x=>x.For().Use());
返回容器;
}

谢谢您的帮助。我会尝试您的代码,然后会给您一些反馈。您返回服务集合的部分应更改为_container.GetAllInstances(serviceType).Cast()