asp.net MVC 4 StructureMap(asp.net MVC 4 with Stru

2019-07-31 07:43发布

我转换的ASP.NET MVC3项目MVC4。 我试图找到StructureMap和MVC4工作的最佳方法。 我发现一对夫妇的解决方案,它可能会奏效,但还没有尝试过呢。

第一个解决方案是非常简单和轻巧 。 第二个( Structuremap.MVC4 )取决于WebActivator为启动。

什么是更好,最简单的方法? 难道我还需要引导一切,设置与WebActivator的DependencyResolver?

谢谢你的帮助。

Answer 1:

我做了以下和它的作品。 希望能帮助到你。

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

    }

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


文章来源: asp.net MVC 4 with StructureMap