我转换的ASP.NET MVC3项目MVC4。 我试图找到StructureMap和MVC4工作的最佳方法。 我发现一对夫妇的解决方案,它可能会奏效,但还没有尝试过呢。
第一个解决方案是非常简单和轻巧 。 第二个( Structuremap.MVC4 )取决于WebActivator为启动。
什么是更好,最简单的方法? 难道我还需要引导一切,设置与WebActivator的DependencyResolver?
谢谢你的帮助。
我转换的ASP.NET MVC3项目MVC4。 我试图找到StructureMap和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);
}
}
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;
}