Как вы писали, A в настоящее время создает экземпляр B, поэтому вы не должны изменять это, создавая экземпляр A в B.
Если B требуется несколько различных данных из A, вы можете позволить A реализовать некоторый IBNeededData
интерфейс. Если B нужен только один вызов для A, прямым решением будет метод обратного вызова.
Редактировать
Вот пример для обратного вызова. (Надеюсь, что вы в порядке с лямбда-выражением, чтобы предоставить данные из А.)
[TestClass]
public class UnitTest1 {
class A {
public void DoWork() {
B b = new B();
//b.GetData = () => "Some data";
Func<string> callback = new Func<string>(this.GetBData);
b.GetData = callback;
b.DoBWork();
}
private string GetBData() {
return "Some data";
}
}
class B {
public Func<string> GetData { get; set; }
public void DoBWork() {
string data = GetData();
Console.WriteLine("Working with {0}", data);
}
}
[TestMethod]
public void TestMethod1() {
A a = new A();
a.DoWork();
}
}