2014-06-06 2 views
0

Microsoft 사이트에서 제공하는 다음 예제를 사용하려고합니다. 유형별로 해석하는 동안 컴파일 타임 오류가 발생합니다. 유니티 컨테이너를 사용하여 유형을 전달하여 해결하는 방법은 무엇입니까?

http://msdn.microsoft.com/en-us/library/vstudio/hh323725(v=vs.100).aspx

이 코드에서 문제가 어떻게이 문제를 해결하려면?

public class DependencyInjectionInstanceProvider : IInstanceProvider 
{ 
    private readonly Type _ServiceType; 

    public DependencyInjectionInstanceProvider(Type serviceType) 
    { 
     _ServiceType = serviceType; 
    } 

    public object GetInstance(InstanceContext instanceContext) 
    { 
     return GetInstance(instanceContext, null); 
    } 

    public object GetInstance(InstanceContext instanceContext, Message message) 
    { 
     return DependencyFactory.Resolve(_ServiceType); //error 
    } 

    public void ReleaseInstance(InstanceContext instanceContext, object instance) 
    { 
    } 
} 


public class DependencyFactory 
{ 
    private static IUnityContainer _container; 

    public static IUnityContainer Container 
    { 
     get 
     { 
      return _container; 
     } 
     private set 
     { 
      _container = value; 
     } 
    } 

    static DependencyFactory() 
    { 
     var container = new UnityContainer(); 

     var section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity"); 
     if (section != null) 
     { 
      section.Configure(container); 
     } 
     _container = container; 
    } 

    public static T Resolve<T>() 
    { 
     T ret = default(T); 

     if (Container.IsRegistered(typeof(T))) 
     { 
      ret = Container.Resolve<T>(); 
     } 

     return ret; 
    } 

} 
+0

나는 그걸 찾을 수만 있다면 대답이 단순한 것이라는 것을 안다. – hal9000

답변

0

오랫동안 답변을 드려 죄송하지만 요즘에만 Unity가 시작되었습니다. 어쩌면 당신은이 방법으로 호출 할 필요가 :

DependencyFactory.Resolve<_ServiceType>(); 

을 그 문제는 발신자의 매개 변수와 같은 유형을 치료하는 생각합니다. 이 링크를 한번보십시오 http://msdn.microsoft.com/en-us/library/ff650319.aspx

0

샘플 코드는 DependencyFactory.Resolve<T>()이지만 DependencyFactory.Resolve(Type typeToResolve)은 아닙니다.

예제 로직을 복제하는 DependencyFactory.Resolve (Type typeToResolve)를 구현할 수 있습니다 (Type을 사용하여 기본값을 생성하려면 Programmatic equivalent of default(Type) 참조).

가장 간단한 해결책은 컨테이너 구성원에 액세스하는 것입니다.

Microsoft.Practices.Unity;

public object GetInstance(InstanceContext instanceContext, Message message) 
{ 
    return DependencyFactory.Container.Resolve(_serviceType); 
} 
관련 문제