Tag: castle windsor

城堡拦截器与流畅的接口

我正在尝试获得一个我写的拦截器,但由于某些原因,当我请求我的组件时它似乎并没有实例化拦截器。 我正在做这样的事情(原谅我,如果这不完全编译,但你应该得到这个想法): container.Register( Component.For().LifeStyle.Transient, AllTypes.Pick().FromAssembly(…).If(t => typeof(IView).IsAssignableFrom(t)). Configure(c => c.LifeStyle.Is(LifestyleType.Transient).Named(…). Interceptors(new InterceptorReference(typeof(MyInterceptor)). WithService.FromInterface(typeof(IView))); 我在Interceptor的构造函数中放置了断点,它似乎根本没有实例化它。 在过去,我使用XML配置注册了我的拦截器,但我很想使用流畅的界面。 任何帮助将不胜感激!

Castle Windsor ApiController工厂实现ASP.NET Web API

我知道可以使用DependancyResolver并将Castle Windsor注册到MVC但是由于https://stackoverflow.com/a/4889222/139392中描述的问题,我们坚持使用我们的MVC项目上的WindsorControllerFactory实现方法。 然而,看起来ApiControllers正在使用其他类型的工厂,因为Castle Windsor无法注入依赖项。 有没有人想出如何在不使用DependencyResolver的情况下将Castle Windsor与ASP.NET Web API和MVC一起使用?

什么是Castle Windsor组件注册环境中的“ForwardedTypes”?

正如主题所说,真的! 他们在做什么?

Castle Windsor注册类与构造函数参数

我有以下课程: public class DatabaseFactory : Disposable, IDatabaseFactory where C : DbContext, BaseContext, new() { private C dataContext; private string connectionString; public DatabaseFactory(string connectionString) { this.connectionString = connectionString; } public C Get() { return dataContext ?? (dataContext = Activator.CreateInstance(typeof(C), new object[] {connectionString}) as C); } protected override void DisposeCore() { if (dataContext != null) dataContext.Dispose(); } […]

无法创建组件,因为它具有要满足的依赖性

我正在学习DDD,n-Tier,Repositoriess等。 有人把我指向ASP.NET Boilerplate,我决定用它开始一个测试项目。 我从来没有处理dependency injection,所以这对我来说都是新的,但它依赖于它使用ius Castle Windsor的DI依赖。 现在,我创建了一个模型,并从这个模型中创建了一个接口。 我还添加了一个服务。 每当我启动应用程序时,它都会给我这个错误: Can’t create component ‘TestApp.Services.MemberInfo.MemberAppService’ as it has dependencies to be satisfied. ‘TestApp.Services.MemberInfo.MemberAppService’ is waiting for the following dependencies: – Service ‘TestApp.Repositories.IMemberInfoRepository’ which was not registered. 我知道你必须注册服务等,但是阅读它在这里说的ABPs文档, http://www.aspnetboilerplate.com/Pages/Documents/Dependency-Injection#DocAbpInfrastructure ,如果你添加App,它们会自动注册到class级的名字。 基本上,这是我的代码: IMemberInfoRepository public interface IMemberInfoRepository : IRepository { } MemberAppService public class MemberAppService : IMemberAppService { private […]

IoC – 多个实现支持单个接口

我想知道为什么.Net IoC容器不能轻易支持单个接口的多个实现! 可能是我错了,但就我所见,像Ninject这样的框架部分支持使用注释这个function( 如何? )。 我不认为像Windsor或简单注入器这样的其他框架有一个简单的机制来支持这种情况。 是否有任何理由不支持许多框架? AFAIK,使用接口的最重要原因之一是实现松散耦合。 如果框架旨在改善松耦合,不能流利地支持单个接口的多个实现,我不明白为什么! PS当然我理解在运行时会出现解决问题,容器会混淆选择哪种实现,但这是设计中必须考虑的事情,对吧?

Castle.Windsor生活方式取决于具体情况?

我有一个Web应用程序,其中许多组件使用.LifestylePerWebRequest()注册,现在我决定实现Quartz.NET ,一个.NET作业调度库,它在不同的线程中执行,而不是Request线程。 因此, HttpContext.Current产生null 。 到目前为止,我的服务,存储库和IDbConnection使用.LifestylePerWebRequest()实例化,因为它使得在请求结束时更容易处理它们。 现在我想在两种情况下使用这些组件,在Web请求期间我希望它们不受影响,在非请求上下文中我希望它们使用不同的生活方式,我想我可以自己处理处理,但我该怎么办关于它根据当前背景选择组件的生活方式? 目前我注册服务(例如),像这样: container.Register( AllTypes .FromAssemblyContaining() .Where(t => t.Name.EndsWith(“Service”)) .WithService.Select(IoC.SelectByInterfaceConvention) .LifestylePerWebRequest() ); 我想我应该使用某种扩展方法,但我只是看不到它..

Castle Windsor – 我是否必须释放单件或非一次性瞬态物体?

Castle wiki在几个地方说我应该总是调用container.Release()来解决通过容器解决的组件。 对于复杂的生活方式管理技术(例如LifeStyle.Pooled)或使用专门设施时,这显然是有意义的…… 但是,我是否真的需要释放单件(直到容器处理为止)和非一次性瞬态物体? 如果我逐步调用Release()调用瞬态对象或单例,这些调用似乎是多余的 – .eg在瞬态对象未实现IDisposable的情况下,内核只是注意到它没有跟踪对象并返回… 似乎存在“组件负担”的概念来跟踪在解析瞬态对象时可能构造的其他一次性组件的“间接”引用。 我知道如果你不知道100%是否有这种间接依赖关系,就必须释放瞬态对象。 这是“敦促”所有Castle用户始终发布组件的主要原因吗?

使用Castle Windsor在WebAPI中进行dependency injection

我想使用Castle Windsor在WebApi应用程序中实现dependency injection。 我有以下示例代码 – 界面 – public interface IWatch { { DateTime GetTime(); } } 以下Watch类实现了IWatch接口 – public class Watch:IWatch { public DateTime GetTime() { return DateTime.Now; } } WebApi控制器 – WatchController如下 – public class WatchController : ApiController { private readonly IWatch _watch; public WatchController() { _watch = new Watch(); } //http://localhost:48036/api/Watch public string […]

使用Castle在自定义成员资格提供程序中注

到目前为止,在阅读有关注入自定义会员提供商的可能性时,我发现了两种可能的方法: 一个是以下内容: http : //bugsquash.blogspot.com/2010/11/windsor-managed-membershipproviders.html 在这里,作者基本上建议注册你的自定义提供程序,然后有一个相当可疑的windsor适配器的成员资格(我真的不喜欢它使用从HttpApplication获取的容器实现你的提供者的方式,它最终包含windsor适配器)。 这是另一个类似的选项: http : //code.google.com/p/webdotnet/source/browse/trunk/Steeg.Framework/Web/Security/MemberShipProvider.cs?r = 2 你只需重写Initialize()并在那里手动实例化依赖项。 至少在第一个中,您不需要手动实例化依赖项(除了提供程序本身)。 还有一些还建议使用某种服务定位器(MVC或其他) 然后我遇到了ninject注入依赖于Membership.Provider上的属性,而不是像_kernel.Inject(Membership.Provider)那样容易。 这更接近我想要的东西,保持构图根本概念,这使我首先使用DI。 如何使用城堡获得类似的结果? 更新:显然这有生命周期管理的问题。 使用Ninject将存储库注入自定义成员资格提供程序 我应该选择#1选项吗? 至少我自己实例提供者。 因此,生命周期管理不应成为问题。