我正在将 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);
}
}
全球.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;
}