2012-02-28 103 views
3

以下是我的問題:我有一個容器,它將具體類型註冊爲接口。解析類型而不創建對象

builder.RegisterType<DeleteOrganization>().As<IDeleteOrganization>(); 

我執行序列化的項目我做和BindToType的方法,我需要實現我想要返回一個類型對象SerializationBinder。 BindToType方法爲我提供了一個assemblyName和typeName(兩個字符串)來幫助我創建一個類型對象。我想要做的是如果typeName是一個接口,我想問Autofac什麼具體的實現類型是爲該接口類型沒有實際擁有它創建該對象。那可能嗎?

回答

5

如果您使用RegisterType註冊您的服務,這是可能的。我寫了一個快速測試,可以幫助您提取所需的數據。


private interface IDeleteOrganization 
{ 

} 

private class DeleteOrganization : IDeleteOrganization 
{ 

} 


[TestMethod] 
public void CanResolveConcreteType() 
{ 
    var builder = new ContainerBuilder(); 

    builder.RegisterType() 
     .As(); 

    using(var container = builder.Build()) 
    { 
     var registration = container.ComponentRegistry 
      .RegistrationsFor(new TypedService(typeof (IDeleteOrganization))) 
      .SingleOrDefault(); 

     if (registration != null) 
     { 
      var activator = registration.Activator as ReflectionActivator; 
      if (activator != null) 
      { 
       //we can get the type 
       var type = activator.LimitType; 
       Assert.AreEqual(type, typeof (DeleteOrganization)); 
      } 
     } 
    } 
}