MVC5+EF+IOC


1 Unity.Config





























2 DIFactory

using Microsoft.Practices.Unity.Configuration;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Web;
using Unity;

namespace Ruanmou.MVC5.Utility
{
public class DIFactory
{
public static IUnityContainer GetContainer()
{
IUnityContainer container = null;
//container.RegisterType
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "CfgFiles\\Unity.Config");
Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
UnityConfigurationSection section = (UnityConfigurationSection)configuration.GetSection(UnityConfigurationSection.SectionName);
container = new UnityContainer();
section.Configure(container, "ruanmouContainer");

return container;
}
}
}

3 ElevenControllerFactory

using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using Unity;

namespace Ruanmou.MVC5.Utility
{
public class ElevenControllerFactory : DefaultControllerFactory
{
private Logger logger = new Logger(typeof(ElevenControllerFactory));

protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
this.logger.Warn($"{controllerType.Name}被构造...");

IUnityContainer container = DIFactory.GetContainer();
//return base.GetControllerInstance(requestContext, controllerType);
return (IController)container.Resolve(controllerType);
}
}
}

mvc