[英]C# - Method to Create Instances of Different Types
我已經創建了一個方法,作為工廠來推廣我需要的連接類型。 在這種情況下,我可能實例化SqlConnection
和PrincipalContext
類型,並返回該實例。 該方法接受單個參數,類型為Object
。 如果參數值是上面指定的類型,它將創建該對象的實例。 我的問題是方法的返回類型是Object
,因此在調用方法時需要強制轉換。
一個例子是:
SqlConnection connection2 = new SqlConnection();
SqlConnection sqlCon = (SqlConnection)ConnectionFactory.RolloutConnectionType(connection2);
和RolloutConnectionType方法:
public static Object RolloutConnectionType(Object obj) {
if (obj == null) {
if (obj is PrincipalContext) {//create new PrincipalContext
string user, pass, domain;
domain = ConfigurationManager.AppSettings["SAdomain"];
user = ConfigurationManager.AppSettings["SAuser"];
pass = ConfigurationManager.AppSettings["SApass"];
obj = new PrincipalContext(ContextType.Domain, domain + ".mydomain.ca", "CN=MyCN,DC=myDC,DC=ca", user, pass);
} else if (obj is SqlConnection) {//create new SqlConnection
string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
obj = new SqlConnection(connStr);
}
}
return obj;
}
我認為我正處於正確的軌道上,但它似乎非常混亂,並且可能與創建實例所需的實例多余 - connection2
在RolloutConnectionType
創建並返回obj
。 它有效,但我不喜歡它是如何工作的。 我正在嘗試的是什么? 還有其他途徑可以追求嗎?
假設你想堅持工廠模式,你應該看看如下的東西:
public interface Factory<T>
{
T Create();
}
public class PrincipalContextFactory : IFactory<PrincipalContext>
{
public PrinicipalContext Create()
{
// return new PrincipalContext(...);
}
}
public class SqlConnectionFactory : IFactory<SqlConnection>
{
public SqlConnection Create()
{
// return new SqlConnection(...);
}
}
您的工廠不應該只需要返回您所追求的新實例。 你可以去泛型( Create<T>()
),但現在你要為不是PrinicpalContext
或SqlConnection
模型創建一堆邊緣情況。
為什么不讓你的工廠類使用你想要創建的每個東西的靜態方法,並讓每個方法返回它自己的正確的類型轉換對象
public static class YourFactory
{
public static SqlConnection GetConnection()
{
string connStr = System.Configuration.ConfigurationManager
.ConnectionStrings["MyConnectionString"].ConnectionString;
return new SqlConnection(connStr);
}
public static PrincipalContext GetPrincipalContext()
{
string user, pass, domain;
domain = ConfigurationManager.AppSettings["SAdomain"];
user = ConfigurationManager.AppSettings["SAuser"];
pass = ConfigurationManager.AppSettings["SApass"];
return new PrincipalContext(ContextType.Domain, domain + ".mydomain.ca",
"CN=MyCN,DC=myDC,DC=ca", user, pass);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.