編輯我更新了我的問題的完整性。通用對象創建總是返回空值
我有來自iPHone客戶端的傳入REST調用。它是爲了響應一般請求而使用類型特定的對象 。例如:
http://localhost:81/dashboard/group/id/0
返回從地區類型數據
從客戶http://localhost:81/dashboard/group/id/1
返回數據鍵入
http://localhost:81/dashboard/group/id/2
返回數據從所述用戶鍵入
等等。
的WCF Dashboard.svc服務公開鹼方法GetGroupById 我用來確定並返回特定類型的響應:
公共類控制板:爲RenderingMode。GroupBase,Contracts.IDashboardService { 私人字符串名稱=字符串.Empty;現在
public Dashboard() : base()
{
if (!ServiceSecurityContext.Current.PrimaryIdentity.IsAuthenticated)
throw new WebException("Unauthorized: Class: Dashboard, Method: Dashboard()",
System.Net.HttpStatusCode.Forbidden);
name = ServiceSecurityContext.Current.PrimaryIdentity.Name;
}
public override System.IO.Stream GetGroupById(string id)
{
return base.GetGroupById(id);
}
}
,我的抽象基類中的GetGroupById有填充 並返回基於相應的groupid參數獨特的數據傳輸對象的開關/ case語句:
public abstract class GroupBase
{
protected GroupBase() { }
public virtual Stream GetGroupById(string id)
{
// I have tried assigning response to null or, in this case,
// assigning it to a random service object. I have also tried
// IObjectFactory response; The last fails at compile-time and
// the other two always produce null
IObjectFactory response =
ObjectFactory<IObjectFactory, UserService>.Create();
var groupId = System.Convert.ToInt32(id);
var serializer = new JavaScriptSerializer();
byte[] bytes = null;
var message = String.Empty;
try
{
switch (groupId)
{
case 0: // regions
response = ObjectFactory<IObjectFactory, RegionService>.Create();
break;
case 1: // customers
response = ObjectFactory<IObjectFactory, CustomerService>.Create();
break;
case 2: // users
response = ObjectFactory<IObjectFactory, UserService>.Create();
break;
}
}
catch (EngageException oops)
{
message = oops.Message;
}
bytes = Encoding.UTF8.GetBytes(serializer.Serialize(response));
return new MemoryStream(bytes);
}
}
一位顧客ObjectFactory類是用於創建類型特定的對象:
public static class ObjectFactory其中T:F,new() { public static F Create() { return new T(); }}
WHERE我有一個問題是什麼是我的ObjectFactory的引擎蓋下回事。我總是 得到** null **回來。例如,考慮下面的REST HTTP GET:
http://localhost:81/dashboard/group/id/2
上述命令是要求數據庫中的所有用戶的JSON字符串。因此,將 UserService類傳遞給ObjectFactory方法。
public class UserService : IObjectFactory
{
DomainObjectsDto IObjectFactory.Children
{
get
{
return new Contracts.DomainObjectsDto(UserRepository
.GetAllUsers().Select
(p => new Contracts.DomainObjectDto
{
Title = GroupTypes.Customer.ToString(),
Id = p.CustomerId.ToString(),
Type = p.GetType().ToString()
}));
}
}
string IObjectFactory.Method
{
get;
set;
}
string IObjectFactory.Status
{
get;
set;
}
etc...
而且,只讀獲取財產從UserRepository獲取數據,填充數據傳輸對象 (如下圖所示)
[DataContract]
public class DomainObjectDto
{
[DataMember]
public string Title { get; set; }
[DataMember]
public string Id { get; set; }
[DataMember]
public string Type { get; set; }
}
[CollectionDataContract]
public class DomainObjectsDto : List<DomainObjectDto>
{
public DomainObjectsDto() { }
public DomainObjectsDto(IEnumerable<DomainObjectDto> source) : base(source) { }
}
並應用戶數據的序列化JSON字符串返回給客戶端。但是,我的對象工廠類中的通用類型T始終爲空:
public static F Create()
{
return new T(); // <-- always null!
}
任何想法?
你已經給了我們一些代碼。如果您可以發佈一個簡短但完整的程序來展示問題,那麼瞭解發生的事情會更容易。 – 2011-02-08 19:50:03
謝謝喬恩。我同意:)我已經轉貼了一個完整的問題(我希望)。請讓我知道,如果我已經離開了其他東西,並感謝您的關注。 – 2011-02-08 21:03:13
有趣的 - 看起來,一切工作正常後端,然後當JSON字符串應發佈到客戶端,WCF再次通過整個過程,併產生空。軟的像一秒和不必要的後回 – 2011-02-09 14:56:39