当使用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));
}
}
Run Code Online (Sandbox Code Playgroud)
我的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()
);
}
}
Run Code Online (Sandbox Code Playgroud)
我的控制器
public class PersonController : Controller
{
private IFirmTasks tasks;
public PersonController(IFirmTasks tasks)
{
this.tasks …Run Code Online (Sandbox Code Playgroud) asp.net-mvc castle-windsor ioc-container inversion-of-control
我在我的解决方案中有一个本地WCF服务,我引用了它.但是我的控制器类无法获取Service命名空间?传统上我会使用svcUtil来编写一个包装类但是因为这是内部的我虽然我可以简单地添加"服务引用",然后点击命名空间然后简单地调用我的服务(即var service = new QServiceReference.MyClass();)
我无法显示图片,所以这里是我解决方案的结构,
Solution
-> Services Folder
-> QService Folder
QService Project
-> Web Folder
-> Zipporah.Queuing.Web (project)
-> Services References
-> QServiceReference
-> Controllers Folder
-> KioskProcessController
Run Code Online (Sandbox Code Playgroud)
我的类(KioskProcessController)如下:
using System.Web.Mvc;
using Zipporah.Queuing.Web.QServiceReference; (ITS THIS NAMESPACE REFERENCE THAT DOES NOT WORK)
namespace Zipporah.Queuing.Web.Controllers
{
public class KioskProcessController : ZipController
{
public ActionResult Index()
{
return View();
}
public ViewResult Queue()
{
return View();
}
public ViewResult PreAppointment()
{
return View();
}
}
}
Run Code Online (Sandbox Code Playgroud)
对不起,如果那个结构不清楚(如上所述我不能发布图片)
任何线索或想法都会受到最高的赞赏?