10

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

第一个解决方案非常简单和轻量级。第二个(Structuremap.MVC4)依赖于 WebActivator 来启动。

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

谢谢你的帮助。

4

1 回答 1

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

    }

全球.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;
    }
于 2012-08-31T18:00:42.307 回答