ASP.NET MVC 프로젝트에서 Castle Windsor 2.5.1을 사용하고 속성 주입을 사용하여 기본 컨트롤러 클래스에서 항상 사용할 수 있다고 예상되는 개체를 만듭니다. 나는이 객체를 생성하기 위해 팩토리를 사용하지만 생성자에 오류가있는 경우 Windsor에서 경고를 얻지 못하고 객체를 반환하지만 속성을 주입하지는 않습니다.Castle Windsor 이상한 동작 wth 속성 주입 및 팩토리 메서드
예상되는 동작입니까? 그렇다면 팩터 리가 아무것도 반환하지 못할 때 발생하는 오류를 어떻게 얻을 수 있습니까? 그것은 나를 다시 포기하지 않았다 순간에도 - 여기
내가 내 MVC 응용 프로그램이 사용하는 경우ReleaseComponent
호출 할 때, 나는 윈저에서 내부 오류가 발생, 예를 들어
public class MyDependency : IMyDependency
{
public MyDependency(bool error)
{
if (error) throw new Exception("I error on creation");
}
}
public interface IMyDependency
{
}
public class MyConsumer
{
public IMyDependency MyDependency { get; set; }
}
[TestFixture]
public class ProgramTest
{
[Test]
public void CreateWithoutError() //Works as expected
{
var container = new WindsorContainer().Register(
Component.For<IMyDependency>().UsingFactoryMethod(() => new MyDependency(false)).LifeStyle.Transient,
Component.For<MyConsumer>().LifeStyle.Transient
);
var consumer = container.Resolve<MyConsumer>();
Assert.IsNotNull(consumer);
Assert.IsNotNull(consumer.MyDependency);
}
[Test]
public void CreateWithError_WhatShouldHappen() //I would expect an error since it can't create MyDependency
{
var container = new WindsorContainer().Register(
Component.For<IMyDependency>().UsingFactoryMethod(() => new MyDependency(true)).LifeStyle.Transient,
Component.For<MyConsumer>().LifeStyle.Transient
);
Assert.Throws<Exception>(() => container.Resolve<MyConsumer>());
}
[Test]
public void CreateWithError_WhatActuallyHappens() //Gives me back a consumer, but ignores MyDependency
{
var container = new WindsorContainer().Register(
Component.For<IMyDependency>().UsingFactoryMethod(() => new MyDependency(true)).LifeStyle.Transient,
Component.For<MyConsumer>().LifeStyle.Transient
);
var consumer = container.Resolve<MyConsumer>();
Assert.IsNotNull(consumer);
Assert.IsNull(consumer.MyDependency); //Basically fails silently!
}
}
흥미로운 관찰이다 클래스에 내 종속성을 주입하면 여전히 그것을 공개하려고 시도합니다.
감사합니다. 이 문제를 해결하기 위해 몇 가지 방법으로 문제를 해결할 수 있습니다. – amarsuperstar
다음은이 문제를 해결하는 방법입니다. http://stackoverflow.com/a/12007547/114029 –