我會同意@stakx的評估。我使用不同的方法創建容器,使其更加環境不可知。我創建一個接口:
/// <summary>
/// Defines the required contract for implementing a composition container factory.
/// </summary>
public interface ICompositionContainerFactory
{
#region Methods
/// <summary>
/// Creates an instance of <see cref="CompositionContainer"/>.
/// </summary>
/// <returns>An instance of <see cref="CompositionContainer"/>.</returns>
CompositionContainer CreateCompositionContainer();
#endregion
}
隨着默認實現(在控制檯應用程序的工作原理,服務主機):
public class DefaultCompositionContainerFactory : ICompositionContainerFactory
{
#region Methods
/// <summary>
/// Creates an instance of <see cref="CompositionContainer"/>.
/// </summary>
/// <returns>
/// An instance of <see cref="CompositionContainer"/>.
/// </returns>
public CompositionContainer CreateCompositionContainer()
{
var domain = AppDomain.CurrentDomain;
string path = domain.BaseDirectory;
// Use the base directory from where the application is running.
var catalog = new DirectoryCatalog(path);
// Create the container.
var container = new CompositionContainer(catalog);
return container;
}
#endregion
}
而一個網絡具體實施:
public class WebCompositionContainerFactory : ICompositionContainerFactory
{
#region Methods
/// <summary>
/// Creates an instance of <see cref="CompositionContainer"/>.
/// </summary>
/// <returns>
/// An instance of <see cref="CompositionContainer"/>.
/// </returns>
public CompositionContainer CreateCompositionContainer()
{
string path = HttpRuntime.BinDirectory;
// Use the base directory from where the application is running.
var catalog = new DirectoryCatalog(path);
// Create the container.
var container = new CompositionContainer(catalog);
return container;
}
#endregion
}
我通過配置連線。
要考慮的另一件事是,您正在傳遞* .exe作爲您的目錄過濾器,您是否在您的Web應用程序中使用可執行程序集?
你將什麼值作爲'路徑'傳遞給LoadPlugins? – 2012-07-13 11:06:13
HttpContext.Current.Server.MapPath(configPath)其中configPath看起來像「〜\ Plugin」。最後,路徑= D:\ TFS \ Projects \ WebTools \ trunc \ WebTools.UI.Web \ Plugins – eye 2012-07-13 11:55:48