[英]How can I use Unity with internal classes?
我有一個Web API應用程序,並使用Unity進行依賴注入。 該應用程序使用包含Interface IDoStuff的庫和實現該接口的類:
internal interface IDoStuff
{
void DoSomething();
}
internal class DoStuff : IDoStuff
{
public void DoSomething()
{
// Do some stuff
}
}
該庫還有一個需要做的事情的公共類:
public class NeedToDoStuff
{
private IDoStuff doStuff;
public NeedToDoStuff()
{
this.doStuff = new DoStuff();
}
internal NeedToDoStuff(IDoStuff doStuff)
{
this.doStuff = doStuff;
}
void PleaseDoStuff()
{
doStuff.DoSomething();
}
}
我想使用Unity在我的控制器中創建一個NeedToDoStuff實例,並負責在內部創建DoStuff類,而不是直接調用new的構造函數。 但是,我能看到的唯一方法是將IDoStuff接口和DoStuff類都公開,這對我來說似乎是錯誤的。 這似乎是錯誤的,因為這些是實現細節,只與庫本身相關。 我通過控制反轉得到了你允許頂級應用程序通過某種配置對其底層實現做出選擇,但是這是否意味着不再需要內部等?
雖然我個人反對內部接口,但您可以通過添加允許團結使用它們
[assembly: InternalsVisibleTo("Unity_ILEmit_InterfaceProxies")]
到包含您的接口的項目的AssemblyInfo.cs文件。 我在嘗試添加[assembly:InternalsVisibleTo(“Microsoft.Practices.Unity”)]之后發現了這個,我看到它在其他帖子中沒有用,並且沒有效果,但覺得這是正確的方向。 我從代碼中提取的堆棧跟蹤引用了上面的程序集並允許代碼工作。
這將允許您隱藏您的接口。 構造函數是另一個故事。
我發布了自己的答案,因為我認為它最接近於回答我原來的問題。 它可能不像Steven的建議那樣干凈,但是喜歡或討厭它,它確實允許庫的內部類與Unity結合使用。
我需要對類/接口進行三次更新:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.