2011-07-21 36 views
1

接口的IDependencyResolver有兩個方法GetService和GetServices,我實現,如:StructureMap MVC 3的IDependencyResolver

public class SmDependencyResolver : IDependencyResolver { 

    private readonly IContainer _container; 

    public SmDependencyResolver(IContainer container) { 
     _container = container; 
    } 

    public object GetService(Type serviceType) { 
     if (serviceType == null) return null; 
     try { 
       return serviceType.IsAbstract || serviceType.IsInterface 
         ? _container.TryGetInstance(serviceType) 
         : _container.GetInstance(serviceType); 
     } 
     catch (Exception ex) 
     { 

      return null; 
     } 
    } 

    public IEnumerable<object> GetServices(Type serviceType) { 
     return _container.GetAllInstances<object>().Where(s => s.GetType() == serviceType); 
    } 
} 

但我也NEAD爲DependencyResolver的NamedInstace。 This ObjectFactory.GetNamedInstace(「instanceName」);集裝箱 我怎樣才能做到這一點..

對不起,我使用的IDependencyResolver界面我的英語不好

回答

1

創建一個擴展方法,就像我在下面做的那樣。 SmDependencyResolver需要將_container變量作爲讀取屬性公開。

public static class DependencyResolverExtensions 
{ 
     public static object GetService(this IDependencyResolver resolver, Type serviceType, string instanceName) 
     { 
      var smResolver = resolver as SmDependencyResolver; 

      if (smResolver == null) throw new NotSupportedException(); 

      return smResolver.Container.GetInstance(serviceType, instanceName); 
     } 
} 
1

無法檢索命名實例。直接訪問IContainer。