我做了以下,它的工作原理。希望能幫助到你。
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;
}
感謝您help.I'll嘗試你的代碼,我會盡快給你一些反饋。 – LeftyX
您返回服務集合的部分應更改爲_container.GetAllInstances(serviceType).Cast