Tag: 城堡 windsor

为什么在IWindsorContainer上使用IKernel?

我在几个代码示例中看到人们使用了IKernel而不是使用IWindsorContainer 。 为什么是这样? 这是一个例子: http : //docs.castleproject.org/(S(kwaa14uzdj55gv55dzgf0vui))/ Windsor.Windsor-tutorial-part-two-plugging-Windsor-in.ashx 在上面的例子中它引起了我的兴趣,因为我添加了一个subresolver Container.Kernel.Resolver.AddSubResolver( new CollectionResolver(Container.Kernel, true)); 这将允许我注入集合…但它没有工作。 我发现因为只使用了IKernel ,它无法使用Windsor的全部function。 为什么有人想要在整个容器上使用内核? 我想如果您打算实施Windsor,请使用完整的容器。 我错了吗? 为什么?

当你没有对容器的引用时,是否有可能让Castle Windsor解决属性依赖性问题?

我们有一个解决方案,其中有多个项目代表我们的应用程序层。 例如 域 数据 逻辑 WebUI中 我们的Castle Windsor容器从我们的Web层引用,然后我们将这些依赖项级联到层。 例如… // In Domain public interface IFooRepository { void DoSomething(); } // In Data public class FooRepository : IFooRepository { public void DoSomething() { // Something is done } } // In Logic public class MyThingManager { private readonly IFooRepository fooRepository; public MyThingManager(IFooRepository fooRepository) { this.fooRepository = […]

我可以使用类型工厂设备返回基于(枚举)参数的实现吗?

不确定这是否可行。 我需要根据枚举值返回正确的服务实现。 所以手工编码的实现看起来像: public enum MyEnum { One, Two } public class MyFactory { public ITypeIWantToCreate Create(MyEnum type) { switch (type) { case MyEnum.One return new TypeIWantToCreate1(); break; case MyEnum.Two return new TypeIWantToCreate2(); break; default: return null; } } } 返回的实现具有额外的依赖关系,需要通过容器注入,因此手动工厂将无法工作。 这是可能的,如果是这样,注册会是什么样的?

温莎城堡与多个建设者

我目前正在进行转换,从使用Ninject到当前版本的Castle Windsor,用于简单的C#.NET应用程序。 在大多数情况下,转换进展顺利,容器的实施已经完美无缺。 但是我的存储库对象存在一个小问题。 我有一个用户存储库对象,以下列方式编码: public class UserRepository : IUserRepository { public UserRepository(IObjectContext objectContext) { // Check that the supplied arguments are valid. Validate.Arguments.IsNotNull(objectContext, “objectContext”); // Initialize the local fields. ObjectContext = objectContext; } public UserRepository(IObjectContextFactory factory) : this(factory.CreateObjectContext()) { } // ———————————————– // Insert methods and properties… // ———————————————– } 为了对应这段代码,我在应用程序的配置文件中设置了以下条目: ${objectContextFactory} 对我来说,一切看起来都应该如此。 当我尝试解析IObjectContextFactory服务的实例时,我检索一个ObjectContextFactory对象。 […]

具有不同构造函数参数的装饰器

使用Castle Windsor,我想创建一个记录整数的类。 但是我想和其他课程一起装饰几次。 如果所涉及的所有混凝土都具有可以解决的依赖关系,我可以看到它是如何工作的,但这不是这里的情况。 考虑以下代码: public interface IRecorder { void Add(int value); } public class NotifyingRecorder : IRecorder { readonly IRecorder decoratedRecorder; public NotifyingRecorder(IRecorder decoratedRecorder) { this.decoratedRecorder = decoratedRecorder; } public void Add(int value) { decoratedRecorder.Add(value); System.Console.WriteLine(“Added ” + value); } } public class ModelUpdatingRecorder : IRecorder { int seed; public ModelUpdatingRecorder(int seed) { this.seed […]

为什么Castle Windsor试图将我的“内容”和“脚本”文件夹解析为控制器?

我创建了一个ASP.NET MVC应用程序,并尝试使用Castle Windsor作为我的IOC 但是,当控制器试图解决时,我将’Content’和’Scripts’放入CreateController(RequestContext requestContext, string controllerName)方法中的’controllerName’参数中。 不用说这些不是控制器。 它们似乎是网站的文件夹 为什么要尝试将这些注册为控制器? 我该如何忽略这些文件夹? 谢谢 来自WindsorControllerFactory的exception 由于无法发布图像我必须描述它 – 它基本上只是说 ‘找不到内容控制器’ 的Global.asax.cs public static IIocContainer Ioc; protected void Application_Start() { InitialiseIocContainer(); RegisterViewEngine(ViewEngines.Engines); RegisterRoutes(RouteTable.Routes); StartProfiling(); } private void InitialiseIocContainer() { IWindsorContainer _container = new WindsorContainer(); var controllerTypes = typeof (GidgetController).Assembly.GetTypes(); foreach (var controllerType in controllerTypes.Where((t=>typeof(IController).IsAssignableFrom(t)))) { _container.AddComponentLifeStyle(controllerType.Name.ToLower(), controllerType, LifestyleType.Transient); } […]