7

Có bất cứ nơi nào trong ASP.NET MVC nơi bạn có thể nhận được một tham chiếu đến ResourceProviderFactory được khởi tạo để thực hiện thuộc tính Injection để thêm một DB thực hiện tùy chỉnh để lấy các tài nguyên từ?Tùy chỉnh ResourceProviderFactory Dependency Injection

Tôi có nhà cung cấp tài nguyên tùy chỉnh đang được tải nhưng tôi muốn biết liệu có thay thế cho việc sử dụng vùng chứa DI tĩnh để tiêm phụ thuộc trong Nhà cung cấp hay không.

Tương tự như cách bạn có thể tiêm cho vai trò và nhà cung cấp tư cách thành viên trong MVC.

Trả lời

4

Bí quyết là triển khai các cuộc gọi thành phần cơ sở hạ tầng vào DependencyResolver.Current của MVC, vì vậy bạn có thể đăng ký ResourceProviderFactory thực bằng cách sử dụng vùng chứa DI yêu thích của mình.

Dưới đây là ví dụ một lớp học mà sẽ làm các trick:

public class MvcResourceProviderFactory : ResourceProviderFactory 
{ 
    public override IResourceProvider CreateGlobalResourceProvider(
     string classKey) 
    { 
     return GetFactory().CreateGlobalResourceProvider(classKey); 
    } 

    public override IResourceProvider CreateLocalResourceProvider(
     string virtualPath) 
    { 
     return GetFactory().CreateLocalResourceProvider(virtualPath); 
    } 

    private static ResourceProviderFactory GetFactory() 
    { 
     var resolver = DependencyResolver.Current; 

     var factory = resolver.GetService<ResourceProviderFactory>(); 

     if (factory != null) 
     { 
      return factory; 
     } 

     throw new InvalidOperationException(string.Format(
      "No {0} has been registered in the {1}.", 
      typeof(ResourceProviderFactory).FullName, 
      DependencyResolver.Current.GetType().FullName)); 
    } 
} 

Lớp này có thể được cấu hình như sau:

<globalization 
    resourceProviderFactoryType="MyApp.MvcResourceProviderFactory, MyApp" 
    enableClientBasedCulture="true" uiCulture="auto" culture="auto" 
/> 
+1

Tôi đưa cho bạn câu trả lời đúng về vấn đề này vì nó trả lời câu hỏi. Tôi đã nhận thức được phương pháp này của việc thực hiện những gì tôi đang tìm kiếm nhưng tôi đã quan tâm nhiều hơn nếu có một phương pháp thay thế để xử lý tiêm phụ thuộc thay vì sử dụng ở trên mà tôi hiện đang sử dụng. – Trotts

+0

Tôi đã đấu tranh với điều này một thời gian và cách tiếp cận tốt nhất tôi đã tìm thấy, tốt hay xấu ... – retslig

Các vấn đề liên quan