저는 Entity Framework DbContext Typed 기본 클래스를 사용하는 리포지토리 프로젝트 내에 몇 개의 리포지토리 클래스가 있습니다.Castle Windsor가 기본 클래스를 만들거나 노출하지 않습니다.
기본 클래스
public class RepositoryBase<TC> : IDisposable
where TC : DbContext, new()
{
public virtual T Get<T>(...) where T : class
{
...
}
// ... additional code
}
직원 리포 인터페이스
namespace Insight.Repository.Interfaces
{
public interface IEmployeeRepository
{
Result CreateEmployee(Employee employee);
// ... additional code
}
}
직원 리포는
namespace Insight.Repository.Repositories
{
public class EmployeeRepository : RepositoryBase<InsightContext>, IEmployeeRepository
{
public Result CreateEmployee(Employee employee)
{
return Save(employee);
}
}
// ... additional code
}
나는를 사용하여 Asp.Mvc 웹 사이트 내에서 윈저 컨테이너에 리포 클래스를 추가하고 리포지토리 프로젝트 내의 인터페이스를 기반으로하는 설치 프로그램입니다. 이 시점에서 컨테이너를 살펴 봤는데 세 곳의 저장소가 있습니다.
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Classes.FromAssemblyNamed("Insight.Repository")
.Where(Component.IsInNamespace("Insight.Repository.Repositories"))
.WithService.DefaultInterfaces()
.LifestyleTransient());
}
다음과 같이 DbContext를 등록하려고했지만 동일한 결과가 나타납니다.
container.Register(Component.For<DbContext>()
.ImplementedBy<InsightContext>()
.LifestyleTransient());
그런 다음 내 ApiController 내에서, 나는 다음 리포 클래스의 인스턴스를 속성 주입을 사용하고 있지만 기본 클래스의 기능에 액세스 얻을 수 없습니다.
public class EmployeeController : ApiController
{
public IEmployeeRepository EmployeeRepo { get; set; }
[Route("GetEmployee")]
public void Get()
{
var newEmployeeRepo = new EmployeeRepository();
}
}
EmployeeRepo는 기본 클래스에서 가져 오기() 함수에 액세스 할 수 없습니다하지만 newEmployeeRepo는 않습니다.
이것은 Castle.Windsor를 사용하는 첫 번째 프로젝트이며 명확하게 등록 단계가 빠져 있지만 알아낼 수 있습니다.
누군가가 올바른 방향으로 나를 가리킬 수 있다면, 많이 감사하겠습니다.
편집 :이 라인에 tym32167
void Main()
{
var container = new WindsorContainer();
var type = typeof(II);
container.Register(Classes.FromAssembly(type.Assembly)
.Where(Component.IsInNamespace(type.Namespace))
.WithService.AllInterfaces()
.LifestyleTransient());
var cls = container.Resolve<II>().Dump();
cls.GetFirstName().Dump();
cls.GetLastName().Dump();
}
public interface II
{
string GetFirstName();
}
public class MyClass : II
{
public string GetFirstName()
{
return "First Name";
}
public string GetLastName()
{
return "Last Name";
}
}
코드 나누기에서 제공하는 Linqpad 코드 테스트 :
cls.GetLastName().Dump();
하면이 예상 된 행동인가?
글쎄, 만약 당신이 그것을 넣으면, 그것은 아주 분명하게 들린다. 감사합니다.이 솔루션은 매력적이었습니다. – Vazmo