원본 소스 코드MEF 재산권에 allways 돌아 널
내 BusinessObjects.dll 파일에 간단한 비즈니스 오브젝트가있어 :
내 SharedUI.dll에서namespace BusinessObjects
{
public class MyClass
{
public MyClass()
{
DateTime = DateTime.Now;
}
public DateTime DateTime { get; set; }
}
}
나는이있어 " 내가 현재 선택된 MyClass에에 referece 유지하기 위해 사용하는 상황에 제공 "클래스, - 이것은 simplyfied 예입니다 기억을 :) ...
namespace SharedUI
{
public class AppContext
{
[Export]
public MyClass SelectedMyClass { get; private set; }
public void SetupContext(MyClass myClass)
{
SelectedMyClass = myClass;
}
public static AppContext Context
{
get
{
if (context == null)
{
context = new AppContext();
}
return context;
}
}
private static AppContext context;
}
}
내 MefTe st.exe이 클래스가 있습니다
namespace MefTest
{
public class Program
{
[Import]
public MyClass MyClass { get; set; }
private void Compose()
{
var ventSystem = new MyClass();
AppContext.Context.SetupContext(ventSystem);
var executingAssembly = new AssemblyCatalog(Assembly.GetExecutingAssembly());
var contextAssembly = new AssemblyCatalog(Assembly.LoadFile(string.Format(@"{0}\SharedUI.dll", Environment.CurrentDirectory)));
var catalog = new AggregateCatalog(executingAssembly, contextAssembly);
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
}
private void Run()
{
Compose();
// MyClass is always null in the next line?
Console.WriteLine(MyClass.DateTime.ToString());
Console.ReadKey();
}
private static void Main(string[] args)
{
var p = new Program();
p.Run();
}
}
}
내가 너무 나를 참아주세요 :) MEF 신인이야을
다니엘 Plaisted
MyClass의 소스로부터 제안을 소스 코드와 동일하다 업데이트] ...
SharedUI.dll 이제 다음과 같습니다
namespace SharedUI
{
[Export]
public class AppContext
{
[Export(typeof(MyClass))]
public MyClass SelectedMyClass { get; private set; }
public void SetupContext(MyClass myClass)
{
SelectedMyClass = myClass;
}
}
}
MefTest.exe 이제 다음과 같습니다 : 나는 작업을 얻을 수 없기 때문에
namespace MefTest
{
public class Program
{
[Import]
public MyClass MyClass { get; set; }
[Import]
public AppContext AppContext { get; set; }
private void Compose()
{
var executingAssembly = new AssemblyCatalog(Assembly.GetExecutingAssembly());
var contextAssembly = new AssemblyCatalog(Assembly.LoadFile(string.Format(@"{0}\SharedUI.dll", Environment.CurrentDirectory)));
var catalog = new AggregateCatalog(executingAssembly, contextAssembly);
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
var myClass = new MyClass();
AppContext.SetupContext(myClass);
}
private void Run()
{
Compose();
// AppContext.SelectedMyClass is NOT null in the next line... which is good I guess :)
Console.WriteLine(AppContext.SelectedMyClass.DateTime.ToString());
// MyClass is always null in the next line?
Console.WriteLine(MyClass.DateTime.ToString());
Console.ReadKey();
}
private static void Main(string[] args)
{
var p = new Program();
p.Run();
}
}
}
내가 무슨 일을하고 있는가?
AssemblyCatalog에 'GUI'가로드되었는지 확인 했습니까? –
@Jonas : "GUI"란 무엇입니까? 프로그램 클래스 인 AppContext-clas가 포함되어 있습니까? s 또는 MyClass- 클래스 ...? – kennethkryger
죄송합니다. 두 가지 다른 질문이 생깁니다. AppContext 클래스입니다. 그것이 MEF에 의해로드되고 있는지 확인 했습니까? –