변수가 Lazy
으로 선언 된 경우, Value
속성을 사용할 때 해당 생성자가 호출됩니다.게으른 인스턴스를 초기화 할 때 생성자에 매개 변수 전달
이 Lazy
인스턴스에 일부 매개 변수를 전달해야하지만 올바른 구문을 찾을 수 없습니다. 이것은 내 디자인이 아니며 MEF와 ExportFactory
을 사용하고 있는데, 내 부품의 Lazy
인스턴스를 반환합니다. 내 파트에는 생성자가 있으므로 이러한 생성자를 매개 변수로 호출해야합니다.
public class FooFactory
{
[Export(typeof(Func<string,int,ExportLifetimeContext<IFoo>>))]
public ExportLifetimeContext<IFoo> CreateFoo(string param1, int param2)
{
Foo foo = new Foo(param1, param2);
return new ExportLifetimeContext<IFoo>(foo,
delegate
{
// Clean-up action code goes here. The client might not be able
// to do this through the IFoo interface because it might not
// even expose a Dispose method.
//
// If you created other hidden dependencies in order to construct
// Foo, you could also clean them up here.
foo.Dispose();
});
}
}
다른 곳에서 가져 :
제 경우에는 부품을 완전히 신뢰할 수 없습니다. 또한 수출 된 Func을 호출하는 사람이 (수출국 측에서) 모르기 때문에 함수의 매개 변수로 전달할 식별자가 필요합니다. 이 부분은 자신이 누구인지 주장합니다. 이 부분은 누군가가 주장 할 수있는 보안 구멍입니다. 다른 부분의 민감한 데이터를이 부분에 반환 할 것입니다. 이 문제는 객체를 생성하는 시점에서 디자인으로 해결할 수 있습니다. 이 시점에서 메타 데이터를 사용하여 어떤 부분을 만들고 있는지 알 수 있으며 생성자에 특정 종속성을 쉽게 주입 할 수 있습니다. – Xaqron
@Wim : 폴더에서 플러그인을로드합니다. Foo foo = new Foo (param1, param2)는 구현시 "Foo"를 알지 못하기 때문에 문제가됩니다. 이것은 ExportFactory와 잘 작동하지만 이제는 플러그인의 한 유형의 ViewModel에 매개 변수를 전달해야합니다. 어떤 제안? – ps23
@PatrickS : IFoo를 직접 구현하는 유형의 어셈블리를 스캔 한 다음 리플렉션을 통해 생성자를 호출 할 수 있다고 생각합니다. MEF가 많은 도움이 될 것이라고 생각하지 않기 때문에 원래 질문의 범위를 벗어나서는 너무 자세히 설명되어 있습니다. –