문자열로 객체를 만드는 사용자 정의 윈저 액티베이터를 작성하는 방법은 무엇입니까?
지금까지는 초기화가 필요하지 않았지만 이제는 IScheduledTask가 depand 될 일부 구성 요소가 있습니다. 생성자 주입을 통해.
클래스 이름과 동일한 이름의 인스턴스를 정의하는 방법이 있습니까? 나중에 resolve를 사용하여 모든 종속성을 해결할 예정입니까?
만약 내가 "SomeScheduledTask"매개 변수로 얻을 수있는이 일을 :
IScheduledTask task = (IScheduledTask)container.Resolve(typeName); // I know this is possible. The problem is the registration.
내 문제를 해결하기 위해 이렇게 할 수 있습니다 :
container.Register(Component.For<IScheduledTask>().Named(t => t.Name).Activator<MyActivator>())
그리고 내 activator에서 뭔가를 할 this :
public class MyActivator : IComponentActivator
{
public object Create(CreationContext context)
{
string typeName = context.???; // How do I get the named instance name from here?
Assembly asm = Assembly.GetEntryAssembly();
ObjectHandle oh = Activator.CreateInstance(asm.FullName, typeName);
IScheduledTask task = (IScheduledTask)oh.Unwrap();
task.Execute();
}
public void Destroy(object instance)
{
}
}
IScheduledTask 프로그램에서 사용할 수있는 정보를 알고 있는데 문제는 콘솔 매개 변수를 사용하여 런타임에 구체화 된 개체를 확인하고 있다는 것입니다. 그렇다면 정확히 무엇을 사용해야합니까? –
@the_drow : 구성 요소를 정상적으로 등록하거나 구성 요소 이름으로 typename을 할당하거나, 또는 서비스 유형없이 등록하십시오. –
@Mauricio Scheffer : 그래서 그것은 수동으로해야합니까? –