2017-10-31 3 views
0

종속성 주입을 통해 appsettings.json에서 가져온 publicString ConnectionString을 포함하는 컨트롤러 EBisUserController가 있습니다. 컨트롤러에는 컨트롤러에있는 ConnectionString 속성을 사용해야하는 특성 필터 'EBisUserAuthResourceFilter'가 있습니다. ConnectionString에 액세스하는 가장 뛰어난 방법은 무엇입니까? 필자는 원하는 작업 예제를 가지고 있지만 각 트랜잭션에 대한 파일을 열고 읽어야하므로 올바른 방법은 아닙니다..net 코어의 사용자 정의 필터 안의 appsettings.json에서 연결 문자열을 가져 오는 방법

public class EBisUserAuthResourceFilter : Attribute, IResourceFilter { 

    private string _connectionString; 

    public EBisUserAuthResourceFilter() { 
     var builder = new ConfigurationBuilder() 
      .SetBasePath(Directory.GetCurrentDirectory()) 
      .AddJsonFile("appsettings.json"); 
     _connectionString= builder.Build().GetValue<string>("Data:DefaultConnection:ConnectionString"); //this property exists as property of controller through DI, how can we access it? 
    } 
} 

답변

0

필터에도 의존성 주입이 가능합니다. 여기

지금이 필터

[ServiceFilter(typeof(EBisUserAuthResourceFilter))] 
public class HomeController : Controller 
{ } 
또한 서비스 모음

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddScoped<EBisUserAuthResourceFilter>(); 

    // your existing code to add other services 
} 
이 필터를 추가 할 필요가

를 사용하여 연결 문자열을

public class EBisUserAuthResourceFilter : Attribute, IResourceFilter 
{ 
    private readonly string connectionString; 

    public EBisUserAuthResourceFilter(IConfiguration configuration) 
    { 
     this.connectionString = configuration 
        .GetSection("ConnectionStrings:DefaultConnection").Value; 
    } 
    public void OnResourceExecuted(ResourceExecutedContext context) 
    { 
     // use this.connectionString 
    } 

    public void OnResourceExecuting(ResourceExecutingContext context) 
    { 
     // use this.connectionString 
    } 
} 

을 얻을 수있는 간단한 방법입니다

다른 해결책은 내용의 구조를 표현하는 클래스를 갖는 것입니다. AppSettings.json 파일 또는 하위 섹션과 시작 클래스 'ConfigureServices 방법

services.Configure<SiteSettings>(Configuration); 

에 그로드 지금 당신이 IOptions<SiteSettings>을 주입하여 필요한 속성 값을 사용할 수 있습니다. 이 코드는 보다 덜 매직 문자열 내 코드에 선호합니다.

+0

appsettings.json이 새로운 개발을 위해 종종 다음과 같은 수정으로 수정 되었기 때문에 나보다 더 좋은 예제입니다 : Startup.cs의 ConfigureServices 메소드에서 다음을 추가해야했습니다 :'services.AddTransient (); ' – sammarcow

+0

예. 필터를 사용할 수 있으려면 그렇게해야합니다. – Shyju