은 내가 수정할 수 없습니다 외부 서비스를 DbContext,하지만 난 단지 그 기능의 범위에 새 클래스 라이브러리를 추가 할 수 있습니다. 내 문제는 클래스 라이브러리가 EF-> Repository-> Service 및 IOC 컨테이너를 사용하며 라이브러리에 외부 서비스를 연결하면이 서비스에는 연결 문자열이 정의되어 있지 않으므로 작동하지 않는다는 것입니다. 나는 사용자 서비스 로케이터 할 수있는 내 클래스 라이브러리에서 IOC 컨테이너를 구현하고 정의하는 것을 발견 :를 주입 연결 문자열은
나는 생성자에 연결 문자열을 전달하는 내 자신의 부분 클래스를 만들었internal class ServiceLocator
{
static ServiceLocator()
{
Current = new DefaultServiceLocator();
}
public static IServiceLocator Current { get; }
private sealed class DefaultServiceLocator : IServiceLocator
{
private readonly IKernel _kernel; // Ninject kernel
public DefaultServiceLocator()
{
_kernel = new StandardKernel();
LoadBindings();
}
public T Get<T>()
{
return _kernel.Get<T>();
}
private void LoadBindings()
{
string name = ""; // connection string
_kernel.Bind<DbContext>().ToConstructor(_ => new Entities(name));
_kernel.Bind<IRegionService>().To<RegionService>();
_kernel.Bind<IRegionRepository>().To<RegionRepository>();
_kernel.Bind<IMapper>().ToConstant(AutoMapperConfig.Initialize());
}
}
}
:
public partial class Entities
{
public Entities(string name)
:base(name)
{
}
}
자동 생성으로 클래스는 연결 문자열을 전달하는 것을 허용하지 않습니다 (그리고 나는 이것을 수정하지 않음) :
public partial class Entities : DbContext
{
public Entities()
: base("name=Entities")
{
}
}
나는 그것이 자동 생성 DbContext을 의미 볼 내가 디버그 모드에서 내 테스트 응용 프로그램을 실행 대신에 클래스를 만들어야합니다. 앞서 말했듯이 App.config 파일에 연결 문자열을 추가하기 위해 외부 서비스를 수정할 수 없습니다. 친절하게 제 문제에 대한 가능한 모든 해결책을 제공하십시오. 나는 변화를 디자인하도록 개방적이다.
내가 이것을 이해하지 않는다 : "나는 디버그 모드에서 내 테스트 응용 프로그램을 실행할 때 나는 대신에 의해 생성에 자동 생성 DbContext 클래스에 참조하는 참조 나를." 다른 클래스의 부분 클래스를 추가 할 때, 여전히 동일한 클래스이지만 더 많은 파일에 정의되어있을 수 있으므로 결국 솔루션에 하나의 클래스 만 있어야합니다. 또는 다른 네임 스페이스 또는 어셈블리에서 부분 클래스를 만들었습니까? ("이름 = 엔티티") 기본 : 기본 (이름)이 아닌 공공 기관() : –
@JanMuncinsky는 내 클래스 라이브러리는 공공 기관 (캐릭터 이름)을 인스턴스화 것이다 완. 두 번째 경우 테스트 응용 프로그램은 App.config 파일에서 Entities 연결 문자열을 검색하려고 시도합니다. 내가하고 싶은 일은 내 클래스 라이브러리의 연결 문자열을 하드 코딩하고 엔티티 (문자열 이름) : base (이름)를 호출하는 것입니다. 내가 성취하고자하는 것을 설명합니까? – ironcurtain