Tag: castle windsor

WcfFacility Sequence不包含任何元素

在尝试安装我的wcf服务时,我不断得到一个Sequence包含无元素错误。 这是我的global.asax中的代码: _container = new WindsorContainer(); _container.Register(Component.For().Instance(_container)) .AddFacility() .Install(Configuration.FromAppConfig()) .Install(FromAssembly.InDirectory(new AssemblyFilter(HttpRuntime.BinDirectory, “Web*.dll”))); 这是web.config中的system.servicemodel部分: 这是我的城堡配置(在web.config中): 我错过了一些明显的东西吗 更新: 这是堆栈跟踪: [InvalidOperationException: Sequence contains no elements] System.Linq.Enumerable.Single(IEnumerable`1 source) +371 Castle.Facilities.WcfIntegration.WcfClientExtension.ObtainServiceContract(ComponentModel model, IWcfClientModel clientModel) in c:\TeamCity\buildAgent\work\a19756d977ce9d2c\src\Castle.Facilities.WcfIntegration\Client\WcfClientExtension.cs:239 Castle.Facilities.WcfIntegration.WcfClientExtension.ResolveClientModel(ComponentModel model) in c:\TeamCity\buildAgent\work\a19756d977ce9d2c\src\Castle.Facilities.WcfIntegration\Client\WcfClientExtension.cs:234 Castle.Facilities.WcfIntegration.WcfClientExtension.Kernel_ComponentModelCreated(ComponentModel model) in c:\TeamCity\buildAgent\work\a19756d977ce9d2c\src\Castle.Facilities.WcfIntegration\Client\WcfClientExtension.cs:189 Castle.MicroKernel.ComponentModelDelegate.Invoke(ComponentModel model) +0 Castle.MicroKernel.DefaultKernel.AddCustomComponent(ComponentModel model, Boolean isMetaHandler) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\DefaultKernel.cs:281 Castle.MicroKernel.DefaultKernel.Register(IRegistration[] registrations) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\DefaultKernel.cs:536 Castle.Windsor.WindsorContainer.Register(IRegistration[] registrations) in […]

使用Castle Windsor通过调用者类型依赖Log4Net Logger和检索记录器

我在log4net周围有一个瘦的包装器,我试图使用类型的调用类通过使用Castle.Windsor从log4net.LogManager获取一个记录器。 public class Foo: IFoo { private readonly ICommonLog _logger; public Foo(ICommonLog logger) { _logger = logger; } public void FooBar() { _logger.Info(“Enter FooBar Method”); } } public class CommonLog : ICommonLog { private readonly log4net.ILog _logger; public CommonLog(Type loggerType) { _logger = log4net.LogManager.GetLogger(loggerType); } public void Info(string message) { _logger.Info(message.Cleanse()); } // … } […]

如何将我的申请与会员服务分开?

我正在使用Castle Windsor的ASP.NET MVC 4项目。 其中一个控制器依赖于MembershipService: public class FooController : Controller { private readonly MembershipService MembershipService; public FooController( MembershipService membershipService ) { MembershipService = membershipService; } [Authorize( Roles = “Administrator” )] public ActionResult DoSomething() { var user = MembershipService.GetUser( User.Identity.Name ); // etc… } } 当我开始为这个控制器编写unit testing时(使用Moq),我遇到了一个问题: private Mock membershipServiceMock; [TestInitialize] public void MyTestInitialize() { membershipServiceMock […]

使用Windsor的通用存储库生存期配置

我没有想法如何配置正确的Windsor容器以与Windows应用程序中的存储库一起使用。 我有通用存储库实现Repository,其中T是实体类型,它有一个依赖IDatacontextProvider,它为它提供datacontext: public class Repository : IRepository where T : class { protected DataContext DataContext; public Repository(IDataContextProvider dataContextProvider) { DataContext = dataContextProvider.DataContext; } …. } 对于简单的事情,以下配置一切正常: container.Register( Component.For() .ImplementedBy() .Lifestyle.Transient, Component.For(typeof(IRepository)) .ImplementedBy(typeof(Repository)) .Lifestyle.Transient, …. 当我尝试从多个存储库加入不同的实体时,只要每个存储库实例具有不同的数据上下文实例,就会出现问题。 例如,我有简单的服务: public class SimpleService : ISimpleService { public SimpleService(IRepository, IRepository) { …. } } 我可以将IDataContextProvider设为Singleton,但我认为这会带来更大的问题。 我可以将IDataContextProvider传递给SimpleService,并尝试在那里解析存储库实例,但这需要额外的代码才能使服务易于测试,并且需要额外的依赖性。 可能有人有更好的想法如何解决这个问题? 更新:以下建议,我已经创建了存储库工厂(它与提出的答案有点不同,它没有直接依赖于datacontext,但想法非常相似): public interface […]

使用Castle Fluent界面注册拦截器

我试图通过拦截器实现nhibernate事务处理 ,并无法弄清楚如何通过流畅的机制注册接口。 我看到了 Component.For().Interceptors 但不知道如何使用它。 有人可以帮我吗? 这个例子似乎有点复杂。

使用Fluent界面在Castle Windsor中注册所有课程

我有一个抽象的基类Search 。 一个抽象类IndexedRepositorySearch来自Search 。 一个抽象类FacetSearch来自IndexedRepositorySearch 。 具体类IngredientFacetSearch和RecipeFacetSearch来自FacetSearch 。 目前,我们正在注册来自Search with Castle Windsor的所有内容,如下所示: AllTypes.FromAssembly(assembly) .BasedOn() .WithServiceBase() .WithServiceSelf() .LifestyleTransient() .AllowMultipleMatches() 当我们打电话的时候 _container.ResolveAll(new { searchInput = input, searchResults }); 它无法解决容器中的任何问题。 当我在注册所有内容后在容器上放置一个断点并检查调试器中的AllComponents时,我看到了IngredientFacetSearch和RecipeFacetSearch ,但它们每个只有两个与之关联的服务:他们的自我和Search ,他们的基础。 鉴于他们使用.WithServiceBase()和.WithServiceSelf()注册,您可以期待。 所以问题是如何通过调用ResolveAll()来解决它们? 我确信这很简单,但如果我能找到它,我会很高兴。 提前致谢。

将参数传递给Castle Windsor中的UsingFactoryMethod

如何将动态参数传递给UsingFactoryMethod注册? 例如,我想写一些类似的东西: container.Register( Component.For() .UsingFactoryMethod(return DoSomethingAndReturnInstance(paremeter))); 我需要在运行时发送参数,如下所示: container.Resolve(new { parameter = value }); 怎么做到呢?

Umbraco MVC与温莎城堡

有没有人有任何示例代码让Umbraco MVC使用Castle Windsordependency injection框架? 我遇到的问题是让我的表面控制器使用可注射的参数化构造函数。 我知道我做错了什么但不确定是什么。 我在这里遵循了(非Umbraco)教程 – http://docs.castleproject.org/Windsor.Windsor-tutorial-part-four-putting-it-all-together.ashx – 这基本上意味着在App_Start上我是运行此代码: var container = new WindsorContainer().Install(FromAssembly.This()); var controllerFactory = new MyCustomControllerFactory(container.Kernel); ControllerBuilder.Current.SetControllerFactory(controllerFactory); MyCustomControllerFactory代码如下。 此外,我的IWindsorInstaller实现包含以下内容: container.Register(Classes.FromThisAssembly() .BasedOn() .LifestyleTransient()); 我得到的例外是’找不到支持服务的组件Umbraco.Web.Mvc.RenderMvcController’,当我用一个参数化构造函数调用一个表面控制器时,由下面的GetControllerInstance方法抛出: public class TestSurfaceController : SurfaceController { public TestSurfaceController(INameService nameService) { …. } } 如果有人有一些有效的示例代码,我真的很感激。 我之前已经把Ninject和Umbraco连接起来没有遇到任何麻烦,但是在这个项目中,我被绑在温莎城堡上并且无处可去! 提前致谢。 MyCustomControllerFactory.cs: public class MyCustomControllerFactory : DefaultControllerFactory { private readonly IKernel kernel; […]

架构问题:使用dependency injection导致垃圾API

我想创建一个类来执行各种与数据库相关的低级操作,但是它提供了一个非常简单的UI层接口。 此类表示特定聚合根中的一组数据,由单个ID int检索。 构造函数有四个参数: public AssetRegister(int caseNumber, ILawbaseAssetRepository lawbaseAssetRepository, IAssetChecklistKctcPartRepository assetChecklistKctcPartRepository, User user) { _caseNumber = caseNumber; _lawbaseAssetRepository = lawbaseAssetRepository; _assetChecklistKctcPartRepository = assetChecklistKctcPartRepository; _user = user; LoadChecklists(); } UI层通过IAssetRegister接口访问此类。 Castle Windsor可以提供ILawbaseAssetRepository和IAssetChecklistKctcPartRepository参数本身,但UI代码需要使用匿名类型提供其他两个: int caseNumber = 1000; User user = GetUserFromPage(); IAssetRegister assetRegister = Moose.Application.WindsorContainer.Resolve(new { caseNumber, user}); 从API设计的角度来看,这是垃圾。 UI层开发人员无法知道IAssetRegister需要整数和用户。 他们需要知道类的实现才能使用它。 我知道我必须在这里遇到某种设计问题。 任何人都可以给我一些指示吗?

如何在Castle.Windsor中配置提供多个服务的单个组件实例?

我想配置Windsor容器,以便单个单例样式的实例可以通过容器提供两个或更多服务。 我发现在多个组件声明(基于XML的配置)中使用相同的类型将导致创建该类型的实例以提供每个组件的服务接口,这不是我想要的行为。 例如: interface IA { } interface IB { } class AB : IA, IB { … } 我希望AB的一个实例同时提供IA和IB服务。 我想要这样做的具体原因是我的具体DAO实现扩展了多个接口。 另一方面,我有几个工作组件,它们包含对不同接口的引用。 具体的DAO实例尊重这一点,但是这些单独的工作组件的构造函数需要实现它们的单独接口,我希望Castle.Windsor通过相应的服务请求将相同的对象实例传递给这些工作容器。 大声笑,我觉得这很清楚! :P 有没有人明白我的意思,有没有人有任何想法如何通过组件的XML配置实现这一点?