使用2个独立项目c#和VB

使用2个独立项目c#和VB,c#,vb.net,design-patterns,C#,Vb.net,Design Patterns,我有两个完全独立的项目,一个是vb,一个是c# 项目A-VB 项目B-C# 我们有一个场景,项目A中的代码当前正在使用项目B中的代码 e、 g 项目A Public Class SMS Public Sub New() End Sub Public Function SendSMS() As String Return "SMS Sent " End Function End Class 项目B using ProjectA; pub

我有两个完全独立的项目,一个是vb,一个是c#

项目A-VB

项目B-C#

我们有一个场景,项目A中的代码当前正在使用项目B中的代码 e、 g

项目A

Public Class SMS
    Public Sub New()

    End Sub

    Public Function SendSMS() As String
        Return "SMS Sent "
    End Function
End Class
项目B

using ProjectA;
    public class Email
    {      
        public string SendEmail()
        {
        return "Email Sent ";
        }

        public string SendEmail(SMS sms)
        {
            sms.SendSMS();
            return "Email Sent ";
        }
    }
这很好,但是我们现在需要从项目a发送一封电子邮件,这将在阅读了大量的帮助后创建一个循环引用。我创建了一个接口,并在项目a中使用了该接口:

项目C

Public Class Interface
    Public Interface IEmail
        Sub SendEmail()
    End Interface
End Class
我已在电子邮件上实现了该界面,并将项目A更改为:

Public Function SendSMS(ByVal tEmail As IEmail) As String
    tEmail.SendEmail()
    Return "SMS Sent "
End Function
这在我的ui中运行良好,因为我可以实例化该对象,并且所有操作都正常。 但是,我遇到了一个问题,到目前为止,我不想在UI中实例化该对象,而是在项目A中实例化该对象

Public Sub SendSMSAndEMail()
    Dim temail As New email
    Me.SendSMS(temail)
End Sub
我遇到了真正的路障?我想我应该看一个工厂级,但我对如何最好地实现这一点感到困惑

注意:更多信息:


如果我们再次设计系统,项目A和项目B将在同一个项目(和语言)中,这不会引起问题。因为它是我们有2个用户界面的一个控制台服务器应用程序和一个赢形式的用户界面。项目B最初用于控制台应用程序,并使用主Win表单应用程序使用的各种功能。现在出现的情况是,控制台应用程序中有一些代码,我们需要从主应用程序中获取这些代码,例如发送电子邮件的能力。但是,这些代码很难从控制台应用程序中提取,因为它们与主应用程序使用的语言不同

邪恶解决方案:静态工厂功能

在根项目中声明此静态类(接口项目中的示例)


我知道这是解决问题的唯一方法。

为什么首先要在项目A中实例化对象?我们需要对已发送的SMS消息进行电子邮件确认。SMS消息的当前发送过程在项目A中处理。(为了简单起见,未显示?您能建议另一种方法吗?UI不知道SMS或电子邮件是在后台调用并在某些事件发生时发送的。因此,我无法在UI级别初始化对象,我被迫在项目A或B中这样做。看起来项目A正在直接执行。我不知道I don’我不认为这是一个好方法。你在创建另一个项目(控制台应用程序)时有任何问题吗直接从项目A执行任务?如果我们再次设计系统,项目A和项目B将在同一个项目中,这不会引起问题。因为我们有两个UI,一个控制台服务器应用程序和一个Win forms UI。项目B最初用于控制台应用程序,并使用主Win form应用程序使用的各种功能。它是现在出现的情况是,控制台应用程序中有一些代码,我们需要从主应用程序中获取这些代码,例如发送电子邮件的能力。但是,这些代码很难从控制台应用程序中提取,因为它与主应用程序使用的语言不同。创建另一层库项目,并将一些必需的逻辑迁移到图书馆?对不起,我不知道你能做什么和不能做什么。听起来可能是这样的。你有没有一个例子来说明这是怎么回事?
public static class EmailFactory{
    public static Func<IEmail> Create{ get;set; }
}
EmailFactory.Create = new Func<IEmail>( () => { return new ProjectB.Email() } );
     infrastructure
           |
           |
        library
        /     \
       /       \
[Project A]  [Project B]