همچنین یک Interface را نیز به نام IResourceManager تعریف میکنیم:
public interface IResourceManager { IStringLocalizer Localizer { get; } }
سپس دو کلاس دیگر را ایجاد کرده و آنها را از این اینترفیس مشتق میکنیم. در این اینترفیس، یک خصوصیت Localizer از نوع IStringLocalizer وجود دارد که باید در این کلاسها پیاده سازی شود. این کار را به کمک IStringLocalizerFactory انجام داده و مشخص میکنیم هر کلاس، از کدام ریسورس استفاده کند:
public class SchoolResourceManager : IResourceManager { public SchoolResourceManager (IStringLocalizerFactory factory) { Localizer = factory.Create(typeof(SchoolResource)); } public IStringLocalizer Localizer { get; } }
public class ArtSchoolResourceManager : IResourceManager { public ArtSchoolResourceManager(IStringLocalizerFactory factory) { Localizer = factory.Create(typeof(ArtSchoolResource)); } public IStringLocalizer Localizer { get; } }
سپس در فایل appsetting.json پروژه، یک کلید را تعریف میکنیم تا مشخص کند، نوع application، از نوع مدرسه هست یا از نوع هنرستان:
{ "ConnectionStrings": { "str": "..." }, "Type": "ArtSchool" }
در متد ConfigureServices در فایل startup تعیین میکنیم هنگام شروع به کار برنامه، با توجه به مقدار درون appsetting، کدام سرویس (manager) تزریق شود:
public void ConfigureServices(IServiceCollection services) { services.AddLocalization(); services.AddSingleton<SchoolResourceManager>(); services.AddSingleton<ArtSchoolResourceManager>(); services.AddSingleton<IResourceManager>(cnf => { var type = Configuration.GetSection("Type").Value; if (type == "ArtSchool") return cnf.GetServices<ArtSchoolResourceManager>().FirstOrDefault(); return cnf.GetServices<SchoolResourceManager>().FirstOrDefault(); }); }
خوب حالا با خیال راحت برنامه را توسعه میدهیم و در viewها و Controllerها از همان کلیدهای School و Student استفاده میکنیم:
: View
@inject IResourceManager ResourceManager <h2>@ResourceManager.Localizer["Student"] : </h2>
:Controller
public class TestController : Controller { private readonly IResourceManager _resourceManager; public TestController (IResourceManager resourceManager) { _resourceManager = resourceManager; } }