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"
/>
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
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