ASP.NET 응용 프로그램에서 엔티티 프레임 워크와 함께 WCF 기능을 사용하고 있습니다. 목표는 예를 참조 IoC 컨테이너에 dbcontext을 유지하는 것입니다 :Castle Windsor LifeStyle for WCF?
1)의 Global.asax를
protected void Application_Start(object sender, EventArgs e)
{
Container = new WindsorContainer();
Container.AddFacility<WcfFacility>();
Container.Register(
Component.For<IDBContext>().ImplementedBy<DBContext>().LifeStyle.PerWcfOperation()
);
}
2) CustomerService.cs 공용 클래스를 CustomerService : ICustomerService { 개인 읽기 전용 ICustomerBl customerBl;
public CustomerService(ICustomerBl customerBl)
{
this.customerBl = customerBl;
}
public Customer GetById(int Id)
{
Customer customer = customerBl.GetById(5);
return customer;
}
}
3) CustomerBl.cs
public class CustomerBl : ICustomerBl
{
private ICustomerRepository _repository;
public CustomerBl(ICustomerRepository customerRepository)
{
_repository = customerRepository;
}
public Customer GetById(int Id)
{
return _repository.GetById(5);
}
}
4) CustomerRepository.cs
public class CustomerRepository: ICustomerRepository
{
public IDBContext _dbContext;
public CustomerRepository(IDBContext dbContext)
{
_dbContext = dbContext;
}
public Customer GetById(int Id)
{
_dbContext.ContextCounter = 1;
return new Customer
{
Id = 5,
FirstName = "Joe",
LastName = "Blogg",
Age = 45
};
}
}
5) TestServiceClient
protected void Button1_Click(object sender, EventArgs e)
{
ServiceReference1.CustomerServiceClient customer = new ServiceReference1.CustomerServiceClient();
customer.GetById(5);
}
나는 다음과 같은 일을 해요 :
1) CustomerGetById()에서 호출 WCF 방법, dbcontext 여기 인스턴스화 _dbContext.ContextCounter = 0
2)를 다시 호출하고 dbContext 인스턴스화 한 - _dbContext.ContextCounter = 1 목표는 것입니다
을 각각의 단일 wcf 메소드 호출 이후에 dbContext의 새 인스턴스. 어떻게이 작업을 수행 할 수 있습니까?
감사합니다.
다음과 같이 바꿀 수 있습니까? * 문제는 wcf 메소드 호출 이후입니다. inst DBContext의 ance가 저장됩니다. 각 단일 wcf 메서드 호출 후 DBContext 새 인스턴스 싶습니다. 이걸 어떻게 성취 할 수 있니? * 당신이 무엇을 요구하고 있으며 어떤 행동을하고 있는지 분명하지 않다. –
나는 이전 의견에 동의한다. 나는 당신의 질문을 읽는 길에서, 당신이 원하는 것을하고 있어야합니다. PerWcfOperation은 IDBContext 인스턴스의 범위가 현재 WCF 요청/메소드에 적용됨을 의미합니다. – Sneal
예를 들면 다음과 같습니다. 1) wcf 메소드 CustomerGetById()를 호출합니다. dbcontext가 인스턴스화됩니다. 2) wcf 메소드 ProductGetById()를 호출합니다. 이전과 동일한 dbcontext 인스턴스를 갖게되었습니다. 목표는 새로운 목표입니다. 감사합니다. – mirt