Notice: file_put_contents(): Write of 22280 bytes failed with errno=28 No space left on device in /var/www/tgoop/post.php on line 50
Web Devs@fullStackDevs P.471
FULLSTACKDEVS Telegram 471
#ادامه_پست_قبل

🔹کلاس StudentRepositoryProxy پیاده سازی کننده اینترفیس IStudentRepository و هم چنین خود کلاس ریپازیتوری ما (StudentRepository) نیز این اینترفیس را پیاده سازی کرده است . یعنی به ازای یک اینترفیس دو کلاس پیاده سازی کننده داریم با این تفاوت که جزئیات پیاده سازی درStudentRepository و جزئیتات Checking ها در StudentRepositoryProxy اعمال میشود. همچنین در داخل خود کلاس StudentRepositoryProxy به یک نمونه از StudentRepository نیاز داریم ( این مورد از قوائد پیاده سازی الگوی Proxy میباشد) که این نمونه توسط سیستم تزریق وابستگی ساخته خواهد شد.
در واقع کلاس StudentRepositoryProxy به عنوان یک placeholder برای کلاس StudentRepository عمل میکند.
▪️در هنگام استفاده درخواست های خود را فقط و فقط به StudentRepositoryProxy خواهیم داد و این کلاس هست که بعد از اعمال و کنترل دسترسی و انجام Checking ها و فیلتر های تعریف شده قبل از اجرای متدهای ریپازیتوری با StudentRepository ارتباط برقرار کرده و داده ها درصورت لزوم cache میکند.اکنون
برای Register کردن وابستگی ها یک چالش در پیش داریم چون به ازای یک اینترفیس دو کلاس پیاده سازی کننده داریم .

✳️چگونه به ازای یک اینترفیس دو یا چند سرویس را در DI Container پیشفرض Register کنیم⁉️
▪️برای حل این چالش از این تکنیک میتوانیم استفاده کنیم .یعنی در متد ConfigureServices سرویس ها را بدین شکل اضافه کنیم :
▫️ابتدا یک delegate به صورت پراپرتی برای کلاس startup تعریف میکنیم
public delegate IStudentRepository ServiceResolver(string key);
و بعد سرویس ها را بدین گونه اضافه میکنیم.
```
services.AddScoped<StudentRepository>();
services.AddScoped<StudentRepositoryProxy>();

services.AddTransient<ServiceResolver>
(serviceProvider =>
key
=>
{
switch (
key
)
{
case
"GetBasicObject"
:
return
serviceProvider.GetService<StudentRepository>();
                    case
"GetProxyObject"
:
return
serviceProvider.GetService<StudentRepositoryProxy>();
                    
default
:
throw
new KeyNotFoundException();
                }
});```

▪️ پس از انجام این مراحل از این به بعد قادر خواهید بود تا در هر کنترلر یا ApplicationBusinessService یا هر جایی که لازم دارید که از IStudentRepository استفاده کنید و میتوانید بدین شکل عمل کنید :

▫️اگر نیاز به چک کردن و همچنین cache کردن اطلاعات داشتید پس باید به ازاری اینترفیس IStudentRepository یک نمونه از StudentRepositoryProxy در زمان اجرا ساخته شود که این امر با پاس دادن مقدار کلید "GetProxyObject" به دلیگیت ServiceResolver مشخص میشود. بدین شکل :
```public class StudentsController
{
private readonly IStudentRepository _studentRepositoryProxy;

public StudentsController(
ServiceResolver serviceAccessor)
{
_studentRepositoryProxy =
serviceAccessor("GetProxyObject");
}
}```
▫️ اگر هم میخواستید از داده های orginal استفاده کنید و عملیات checking ای برای cache کردن داده ها صورت نگیرد کافیست از سیستم تزریق وابستگی بخواهید تا به ازای اینترفیس IStudentRepository یک نمونه از کلاس StudentRepository بسازد. این امر با پاس دادن مقدار کلید "GetBasicObject" به دلیگیت ServiceResolver مشخص میشود. بدین شکل :
public StudentsController(ServiceResolver serviceAccessor)
{
_studentRepositoryProxy =
serviceAccessor("GetBasicObject");
}
🔻نکته : Register کردن دو یا چند سرویس به ازای یک interface در دیگر Di Container هایی مانند Autofac و Windsor وStructureMap به راحتی امکان پذیر است.

🔻نکته بعدی در مورد caching در این پست MemoryCacheEntryOptions است که با ساخت یک نمونه از روی این کلاس و پاس دادن ان به متد _memoryCacheObject.Set() در هنگام افزودن داده ها درون cache میتوانید برای آن تنظیماتی از جمله size و AbsoluteExpiration و Priority و .. اعمال کنید .

🌀سورس این پست را در اینجا میتوانید بررسی کنید.

@fullStackDevs



tgoop.com/fullStackDevs/471
Create:
Last Update:

#ادامه_پست_قبل

🔹کلاس StudentRepositoryProxy پیاده سازی کننده اینترفیس IStudentRepository و هم چنین خود کلاس ریپازیتوری ما (StudentRepository) نیز این اینترفیس را پیاده سازی کرده است . یعنی به ازای یک اینترفیس دو کلاس پیاده سازی کننده داریم با این تفاوت که جزئیات پیاده سازی درStudentRepository و جزئیتات Checking ها در StudentRepositoryProxy اعمال میشود. همچنین در داخل خود کلاس StudentRepositoryProxy به یک نمونه از StudentRepository نیاز داریم ( این مورد از قوائد پیاده سازی الگوی Proxy میباشد) که این نمونه توسط سیستم تزریق وابستگی ساخته خواهد شد.
در واقع کلاس StudentRepositoryProxy به عنوان یک placeholder برای کلاس StudentRepository عمل میکند.
▪️در هنگام استفاده درخواست های خود را فقط و فقط به StudentRepositoryProxy خواهیم داد و این کلاس هست که بعد از اعمال و کنترل دسترسی و انجام Checking ها و فیلتر های تعریف شده قبل از اجرای متدهای ریپازیتوری با StudentRepository ارتباط برقرار کرده و داده ها درصورت لزوم cache میکند.اکنون
برای Register کردن وابستگی ها یک چالش در پیش داریم چون به ازای یک اینترفیس دو کلاس پیاده سازی کننده داریم .

✳️چگونه به ازای یک اینترفیس دو یا چند سرویس را در DI Container پیشفرض Register کنیم⁉️
▪️برای حل این چالش از این تکنیک میتوانیم استفاده کنیم .یعنی در متد ConfigureServices سرویس ها را بدین شکل اضافه کنیم :
▫️ابتدا یک delegate به صورت پراپرتی برای کلاس startup تعریف میکنیم
public delegate IStudentRepository ServiceResolver(string key);
و بعد سرویس ها را بدین گونه اضافه میکنیم.

```
services.AddScoped<StudentRepository>();
services.AddScoped<StudentRepositoryProxy>();

services.AddTransient<ServiceResolver>
(serviceProvider =>
key
=>
{
switch (
key
)
{
case
"GetBasicObject"
:
return
serviceProvider.GetService<StudentRepository>();
                    case
"GetProxyObject"
:
return
serviceProvider.GetService<StudentRepositoryProxy>();
                    
default
:
throw
new KeyNotFoundException();
                }
});```

▪️ پس از انجام این مراحل از این به بعد قادر خواهید بود تا در هر کنترلر یا ApplicationBusinessService یا هر جایی که لازم دارید که از IStudentRepository استفاده کنید و میتوانید بدین شکل عمل کنید :

▫️اگر نیاز به چک کردن و همچنین cache کردن اطلاعات داشتید پس باید به ازاری اینترفیس IStudentRepository یک نمونه از StudentRepositoryProxy در زمان اجرا ساخته شود که این امر با پاس دادن مقدار کلید "GetProxyObject" به دلیگیت ServiceResolver مشخص میشود. بدین شکل :
```public class StudentsController
{
private readonly IStudentRepository _studentRepositoryProxy;

public StudentsController(
ServiceResolver serviceAccessor)
{
_studentRepositoryProxy =
serviceAccessor("GetProxyObject");
}
}```
▫️ اگر هم میخواستید از داده های orginal استفاده کنید و عملیات checking ای برای cache کردن داده ها صورت نگیرد کافیست از سیستم تزریق وابستگی بخواهید تا به ازای اینترفیس IStudentRepository یک نمونه از کلاس StudentRepository بسازد. این امر با پاس دادن مقدار کلید "GetBasicObject" به دلیگیت ServiceResolver مشخص میشود. بدین شکل :
public StudentsController(ServiceResolver serviceAccessor)
{
_studentRepositoryProxy =
serviceAccessor("GetBasicObject");
}
🔻نکته : Register کردن دو یا چند سرویس به ازای یک interface در دیگر Di Container هایی مانند Autofac و Windsor وStructureMap به راحتی امکان پذیر است.

🔻نکته بعدی در مورد caching در این پست MemoryCacheEntryOptions است که با ساخت یک نمونه از روی این کلاس و پاس دادن ان به متد _memoryCacheObject.Set() در هنگام افزودن داده ها درون cache میتوانید برای آن تنظیماتی از جمله size و AbsoluteExpiration و Priority و .. اعمال کنید .

🌀سورس این پست را در اینجا میتوانید بررسی کنید.

@fullStackDevs

BY Web Devs


Share with your friend now:
tgoop.com/fullStackDevs/471

View MORE
Open in Telegram


Telegram News

Date: |

A vandalised bank during the 2019 protest. File photo: May James/HKFP. Among the requests, the Brazilian electoral Court wanted to know if they could obtain data on the origins of malicious content posted on the platform. According to the TSE, this would enable the authorities to track false content and identify the user responsible for publishing it in the first place. On Tuesday, some local media outlets included Sing Tao Daily cited sources as saying the Hong Kong government was considering restricting access to Telegram. Privacy Commissioner for Personal Data Ada Chung told to the Legislative Council on Monday that government officials, police and lawmakers remain the targets of “doxxing” despite a privacy law amendment last year that criminalised the malicious disclosure of personal information. Commenting about the court's concerns about the spread of false information related to the elections, Minister Fachin noted Brazil is "facing circumstances that could put Brazil's democracy at risk." During the meeting, the information technology secretary at the TSE, Julio Valente, put forward a list of requests the court believes will disinformation. bank east asia october 20 kowloon
from us


Telegram Web Devs
FROM American