带有StructureMap的asp.net MVC 4

Lef*_*tyX 10 structuremap webactivator asp.net-mvc-4

我正在将ASP.NET MVC3项目转换为MVC4.我试图找到使用StructureMap和MVC4的最佳方法.我找到了一些可行的解决方案,但尚未尝试过.

第一种解决方案非常简单轻便.第二个(Structuremap.MVC4)依赖于WebActivator进行启动.

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

谢谢你的帮助.

Dar*_*der 14

我做了以下工作.希望能帮助到你.

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);
        }

    }
Run Code Online (Sandbox Code Playgroud)

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;
    }
Run Code Online (Sandbox Code Playgroud)