- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
假设我有这样的类和接口(interface)结构:
interface IService {}
interface IEmailService : IService
{
Task SendAsync(IMessage message);
}
class EmailService : IEmailService
{
async Task SendAsync(IMessage message)
{
await ...
}
}
interface ICircuitBreaker : IService where TService : IService
{
TService Service { get; set; }
Task PerformAsync(Func<>> func);
}
class EmailServiceCircuitBreaker : ICircuitBreaker
{
IEmailService Service { get; set; }
public EmailServiceCircuitBreaker(IEmailService service)
{
Service = service;
}
public async Task PerformAsync(Func<>> func)
{
thử
{
func();
}
catch(Exception e){//Handle failure}
}
}
所以现在我想改变EmailServiceCircuitBreaker
到:
class EmailServiceCircuitBreaker : ICircuitBreaker, IEmailService
所以我可以包装 IEmailService
中的每个方法和 Send(...)
看起来像:
async Task IEmailService.SendAsync(IMessage m)
=> await PerformAsync(async () => await Service.SendAsync(m));
在 Controller 中,我可以将其用作 IEmailService
即使这是 ICircuitBreaker
不知道。
但是,如果我的任何同事会实现 ICircuitBreaker
我想强制他的类(class)也实现 T
câu trả lời hay nhất
当你不想有新的语言约束时,你可以在编译时抛出自定义错误
您可以如下创建代码分析,使用 DiagnosticAnalyzer
https://johnkoerner.com/csharp/creating-your-first-code-analyzer/
sử dụng DiagnosticAnalyzer
,您可以搜索模式并抛出异常
context.RegisterSymbolAction(AnalyzeSymbol, SymbolKind.NamedType);
private static void AnalyzeSymbol(SyntaxNodeAnalysisContext context)
{
var node = (ObjectCreationExpressionSyntax)context.Node;
if (node != null && node.Type != null && node.Type is IdentifierNameSyntax)
{
var type = (IdentifierNameSyntax)node.Type;
var symbol = (INamedTypeSymbol)context.SemanticModel.GetSymbolInfo(type).Symbol;
var isIService = IsInheritedFromIService(symbol);
if (isIService )
{
... //Check you logic
context.ReportDiagnostic(diagnostic);
}
}
}
private static bool IsInheritedFromIService(ITypeSymbol symbol)
{
bool isIService = false;
var lastParent = symbol;
if (lastParent != null)
{
while (lastParent.BaseType != null)
{
if (lastParent.BaseType.Name == "IService")
{
isIService = true;
lastParent = lastParent.BaseType;
phá vỡ;
}
khác
{
lastParent = lastParent.BaseType;
}
}
}
return isIService ;
}
关于c# - 接口(interface)接口(interface)
Việc viết một giao diện chỉ được sử dụng để tập trung các giao diện khác là tốt hay xấu? giao diện Giao diệnA : Giao diệnB, Giao diệnC { }
Có cách nào để xác định loại cụ thể từ danh sách giao diện tùy ý không? Tôi biết về chuyển đổi kiểu, nhưng tôi muốn biết tất cả các giao diện vừa ý. Ví dụ: đã cho: gõ giao diện Mover { Mo
Tôi đang cố gắng tạo một đống Fibonacci. (Chúng đã được đề cập nhiều lần trong lớp thuật toán mà tôi đang tham gia và tôi muốn kiểm tra nó.) Tôi muốn vùng heap sử dụng bất kỳ loại nút nào, vì vậy tôi đã xác định giao diện Nút: loại nút gói
Đây là mã của tôi: gõ IA giao diện { FB() IB } gõ giao diện IB { Bar() string } gõ A struct {
Ví dụ A: // mã giả giao diện IFoo { void bar(); } lớp FooPlatformA : IFoo { void bar() {
Việc kết hợp phản hồi từ các leppies mà nó biên dịch - nhưng IMO có một số nhược điểm và tôi ước trình biên dịch sẽ buộc mỗi lớp con xác định thuộc tính Uri của riêng chúng. Mã hiện tại: [] gõ UriUserControl() = inh
Tôi đang xây dựng một dự án nhận cụm từ từ người dùng, sau đó thực hiện tìm kiếm trên Google và trả về danh sách các tiêu đề ở định dạng json. Tôi đang sử dụng API serpwow để thực hiện tìm kiếm trên Google và cố gắng phân tích phản hồi. Nhưng lỗi tôi nhận được là: pa
Tôi chỉ muốn triển khai một số giao diện nhất định trong các giao diện khác, tôi không muốn chúng được các lớp kế thừa trực tiếp. Cảm ơn trước! Câu trả lời hay nhất Bạn không thể làm điều này trong C# - bất kỳ lớp nào cũng có thể triển khai bất kỳ giao diện nào mà nó có quyền truy cập
Tôi mới sử dụng Go và có một số thủ thuật tôi chưa thành thạo. Ví dụ: tôi có một hàm mà tôi gọi như thế này: myVar.InitOperation("foo",Operator.EQUAL,"bar") myVar. Ban đầu
Tôi có một giao diện chung mô tả quyền truy cập vào luồng đầu ra như sau: giao diện IOutput { function writeInteger(aValue:Int):Void;
Tôi đang thực hiện một dự án mà tôi muốn cài đặt mạch tách sóng quang vào máy tính thông qua một loại giao diện nào đó (tốt nhất là USB). Tuy nhiên, vì là người mới nên tôi không biết nên tiếp cận vấn đề này theo hướng nào. Giả sử tôi có đèn có kết nối USB
Bối cảnh Tôi đang cố gắng tạo một ứng dụng đơn giản để thực sự hiểu toàn bộ DDD + TDD +, v.v. Mục tiêu của tôi là tự động đưa các lớp kho lưu trữ DAL vào thời gian chạy. Điều này làm cho lớp dịch vụ ứng dụng và miền của tôi có thể kiểm tra được. Tôi dự định sử dụng "DI của người nghèo" để đạt được mục tiêu hiện tại
Trong Java, việc một giao diện mở rộng giao diện là hoàn toàn hợp pháp. Mối quan hệ này trong UML trông giống như mối quan hệ "mở rộng" (mũi tên liền, đóng, không điền) hay mối quan hệ "triển khai" (mũi tên nét đứt, đóng, không điền)
Tôi muốn tạo một giao diện với việc triển khai mặc định các hàm so sánh và đẳng thức. Nếu tôi xóa mọi thứ khỏi loại IKeyable ngoại trừ Thành viên chính thì đó là giao diện hợp lệ miễn là tôi không thêm cài đặt mặc định. từ
Giao diện kép trong COM là giao diện có thể được truy cập thông qua phương thức DispInterface hoặc VTable. Bây giờ ai đó có thể cho tôi biết chính xác sự khác biệt giữa hai phương pháp này là gì không? Tôi nghĩ V.
Tôi có một phương thức lớp trả về danh sách nhân viên có thể lặp lại. Cách tốt nhất để trả lại danh sách là gì? Thông thường tôi chỉ trả về một ArrayList. Tuy nhiên, theo những gì tôi hiểu, giao diện phù hợp hơn với loại hoạt động này. Giao diện nào tốt nhất để sử dụng? Ngoài ra, tại sao lại trả về giao diện (trong
Tôi muốn khởi tạo giao diện không tĩnh bên trong từ bên ngoài lớp trình bao bọc. Điều này có thể thực hiện được không? Hãy xem đoạn mã sau: class chia sẻ AOuterClass() { Integer val = 3;
Tôi đã viết một giao diện cho một lớp như sau: public giao diện IGenericMultipleRepository { Lazy> địa chỉ { ge
Tôi là người mới bắt đầu học UML và hiện tôi đang tạo sơ đồ trình tự và vấn đề là tôi muốn triển khai giao diện DAO dựa trên đầu vào của người dùng. Làm thế nào để vẽ nó một cách chính xác trong sơ đồ tuần tự để thực hiện giao diện. Câu trả lời hay nhất Bạn sẽ không ở trên SD
Để tạo các nhóm được xác thực có điều kiện bằng cách sử dụng xác thực jsr 303, hãy chuyển lớp giao diện cho chú thích như thế này: @NotEmpty (groups={UpdateValue.class}) Tôi có nhiều giao diện khác nhau
Tôi là một lập trình viên xuất sắc, rất giỏi!