【发布时间】:2014-03-05 01:49:15
【问题描述】:
当控制器及其依赖项使用 Castle Windsor 通过 (DI/IoC) 模式进行相应注册时,我在控制器上获得了“没有为此对象定义无参数构造函数”。有人可以查看以下内容并查看我的错误,因为我看不到它。
在 global.asax 上的注册代码
public class MyApplication : System.Web.HttpApplication
{
public MvcApplication()
{
this.container = new WindsorContainer().Install(new DependencyInstaller());
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator),
new WindsorActivator(this.container));
}
}
我的 DI
public class DependencyInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
Component.For<IDatabaseFactory>().ImplementedBy<DatabaseFactory>().LifeStyle.PerWebRequest,
Component.For<IUnitOfWork>().ImplementedBy<UnitOfWork>().LifeStyle.PerWebRequest,
Component.For<IMappingEngine>().ImplementedBy<MappingEngine>().UsingFactoryMethod(() => Mapper.Engine).LifeStyle.Singleton,
Component.For<IFirmTasks>().ImplementedBy<FirmTasks>().LifeStyle.PerWebRequest,
Classes.FromAssemblyContaining<PersonController>().BasedOn<IController>().LifestyleTransient(),
Classes.FromThisAssembly().BasedOn<IHttpController>().LifestyleTransient(),
Classes.FromAssemblyNamed("Core.Firm.Tasks").Where(type => type.Name.EndsWith("Tasks")).WithServiceAllInterfaces().LifestylePerWebRequest(),
Classes.FromAssemblyNamed("Core.Firm.Repository")
.Where(type => type.Name.EndsWith("Repository")).WithServiceAllInterfaces().LifestylePerWebRequest()
);
}
}
我的控制器
public class PersonController : Controller
{
private IFirmTasks tasks;
public PersonController(IFirmTasks tasks)
{
this.tasks = tasks;
}
当我加载应用程序时,容器加载正常,所有依赖项都根据调试时的屏幕截图解析。
任何人都知道我的失败在哪里。提前致谢。
【问题讨论】:
标签: asp.net-mvc inversion-of-control castle-windsor ioc-container