안녕하세요 다시 stackoverflowians,Castle Windsor로 일반 유형 및 서비스 등록 IoC
DI 프레임 워크를 사용하는 방법을 배웠던 시간이라고 생각했습니다. 캐슬 윈저에 관해 많은 좋은 것을 들었습니다. 그렇게하기로 마음 먹었습니다. 이제는 그것을 사용하는 방법에 대한 튜토리얼이 많이 있습니다. 그러나 Generics가 참여할 때해야 할 일에 대한 많은 유용한 정보를 찾을 수 없습니다. 여기에 내 문제가있다.
나는이 상황에서 제네릭에 BaseDAO
namespace Utilities.DataAccess
{
public class BaseDAO<T> : IBaseDAO<T>
{
public BaseDAO(IConnectionProvider _connectionProvider)
{
// Stuff
}
}
}
임 조금 새로운 가지고 있고이없는 일반 선언과는 제네릭 구현 단순히 인터페이스와 'BaseDAO'이 일부 자습서를 보았다 그 위에. 나는 이전의 많은 프로젝트 (IoC없이)에서 위의 방법을 사용했고 App.config 이후로 나에게 잘 돌아갔다. 어쨌든,!
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section
name="castle"
type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, Castle.Windsor"></section>
</configSections>
<castle>
<components>
<component
id="BaseDAO"
service="Utilities.DataAccess.Interfaces.IBaseDAO`1, Utilities.DataAccess"
type="Utilities.DataAccess.BaseDAO`1, Utilities.DataAccess" />
<component
id="NHibernateConnection"
service="Utilities.DataAccess.ConnectionProviders.IConnectionProvider, Finchtils"
type="Utilities.DataAccess.ConnectionProviders.NHibernateConnection" />
<component
id="XMLConnection"
service="Utilities.DataAccess.ConnectionProviders.IConnectionProvider, Finchtils"
type="Utilities.DataAccess.ConnectionProviders.XMLConnection, Utilities" />
</components>
</castle>
</configuration>
이제 여러분 중 일부는 지금 생각할 수있는 것처럼 이것이 유틸리티 라이브러리입니다. 필자는 모든 프로젝트에서 동일하게 유지되는 동일한 데이터 액세스 코드를 작성할 필요가 없도록 내가 만든 각 프로젝트에이 어셈블리를 사용할 계획입니다. 그러한 과정의 함축적 의미는 성 (Class)을 BaseDAO에 전달할 유형 매개 변수를 정확하게 말할 수 없다는 것입니다. 한 프로젝트에서 Customer 객체가 될 수도 있고 또 다른 완전히 다른 것일 수도 있습니다. 다른 포럼에서 컨테이너에서 객체를 요청할 때 유형을 지정할 수있는 것처럼 전적으로 가능하다고 읽었습니다. 내 디자인의 노력에 대해이지만
BaseDAO<Customer> baseDao = container.Resolve<BaseDAO<Customer>>();
, 나는 다음과 같은 내가 얻을 어떤 경우에도,이 중 근무하지 않은,
<component
id="BaseDAO"
service="Utilities.DataAccess.Interfaces.IBaseDAO`1[[Utilities.DataInterface.IEntity]], Finchtills.DataAccess"
type="Utilities.DataAccess.BaseDAO`1[[Utilities.DataInterface.IEntity]], Finchtils.DataAccess" />
그러나의 App.config에 다음과 같은 표기법을 사용하는 것을 시도했다 오류 :
Utilities.Testing.DataAccess.Unit.Testing_BaseDAO (TestFixtureSetUp):
System.Exception : The type name Utilities.DataAccess.BaseDAO`1, Utilities.DataAccess could not be located.
----> System.IO.FileNotFoundException : Could not load file or assembly 'Utilities.DataAccess' or one of its dependencies. The system cannot find the file specified.
이 오류를 읽고, 내 생각 그것은 두 가지 중 하나 일 수
,536,유형 및 서비스의 일반 사항과 관련하여 구성 파일에서 뭔가를 놓치고 있습니다.
나는 어셈블리 이름을 잘못 명명했다.
내가 어떤 시점에서 내가 <solution name>.<project name>.<item folder>.<item name>
을 사용했지만 단순히 프로젝트 레벨에서 시작 항목 즉,에 포함되어 프로젝트와 어셈블리 이름을 처리했다 ... 나는 그 모든 설정 옵션을 것이라고 가정 그것으로부터 어떤 해결책이 불려지는지 아십시오.
이 문제에 대해 도움을 주실 수있는 분들께 감사드립니다.
왜 코드 대신 XML을 사용하고 있습니까? http://stw.castleproject.org/Windsor.Three-Calls-Pattern.ashx –
"코드 외부에서이 구성을 만들므로보다 융통성이 있으며 응용 프로그램을 다시 컴파일하지 않고도 변경할 수 있습니다." - 캐슬 윈저에서 시작 가이드를 추천. – user407356
는 그리고 그 링크를 클릭 한 후 게시 나는 것을 볼 수 : 실제로 구성 코드 어쨌든 정의 된 어셈블리의 App.config에서 호출 반환 새로운 WindsorContainer() .Install (Configuration.FromAppConfig(), FromAssembly.This() .이 사이트는 또한 xml을 통해 구성 요소를 등록 할 것을 제안한다고 가정합니다. – user407356